2015-05-07 144 views
0

我想从httpurlconnection得到Json响应。 在我使用httpclient并从中获取httpresponse我得到json。 但现在我不知道如何从httpurlconnection获取httpresponse。 我试图用这个例子来上传图片:从httpurlconnection得到json响应

http://androidexample.com/Upload_File_To_Server_-_Android_Example/index.php?view=article_discription&aid=83&aaid=106

+0

使用它。它非常简单,有更多的好处。 http://loopj.com/android-async-http/ – Yogendra

+0

谢谢我试试。 – Ali

+0

它的gradle :(我使用Eclipse !!! – Ali

回答

0

非常感谢Yogendra但我不是一个亲在Java中,你可以把这段代码转换到异步HTTP:

public int uploadFile(String sourceFileUri) { 


     String fileName = sourceFileUri; 

     HttpURLConnection conn = null; 
     DataOutputStream dos = null; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1 * 1024 * 1024; 
     File sourceFile = new File(sourceFileUri); 

     if (!sourceFile.isFile()) { 

      dialog.dismiss(); 

      Log.e("uploadFile", "Source File not exist :" 
           +uploadFilePath); 

      runOnUiThread(new Runnable() { 
       public void run() { 
        messageText.setText("Source File not exist :" 
          +uploadFilePath); 
       } 
      }); 

      return 0; 

     } 
     else 
     { 
      try { 

       // open a URL connection to the Servlet 
       FileInputStream fileInputStream = new FileInputStream(sourceFile); 
       URL url = new URL(upLoadServerUri); 

       HttpResponse respons; 

       // Open a HTTP connection to the URL 
       conn = (HttpURLConnection) url.openConnection(); 
       conn.setDoInput(true); // Allow Inputs 
       conn.setDoOutput(true); // Allow Outputs 
       conn.setUseCaches(false); // Don't use a Cached Copy 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("Connection", "Keep-Alive"); 
       conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
       conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
       conn.setRequestProperty("uploaded_file", fileName); 



       dos = new DataOutputStream(conn.getOutputStream()); 
       dos.writeBytes(twoHyphens + boundary + lineEnd); 
       dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
             + fileName + "\"" + lineEnd); 

       dos.writeBytes(lineEnd); 

       // create a buffer of maximum size 
       bytesAvailable = fileInputStream.available(); 

       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       buffer = new byte[bufferSize]; 

       // read file and write it into form... 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       while (bytesRead > 0) { 

       dos.write(buffer, 0, bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       } 

       // send multipart form data necesssary after file data... 
       dos.writeBytes(lineEnd); 
       dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 


       StringBuilder builder = new StringBuilder(); 
       builder.append(conn.getResponseCode()) 
         .append(" ") 
         .append(conn.getResponseMessage()) 
         .append("\n"); 

       Map<String, List<String>> map = conn.getHeaderFields(); 
       for (Map.Entry<String, List<String>> entry : map.entrySet()) 
       { 
        if (entry.getKey() == null) 
         continue; 
        builder.append(entry.getKey()) 
          .append(": "); 

        List<String> headerValues = entry.getValue(); 
        Iterator<String> it = headerValues.iterator(); 
        if (it.hasNext()) { 
         builder.append(it.next()); 

         while (it.hasNext()) { 
          builder.append(", ") 
            .append(it.next()); 
         } 
        } 

        builder.append("\n"); 
       } 

       Log.i("Response", builder.toString()); 


       // Responses from the server (code and message) 
       serverResponseCode = conn.getResponseCode(); 
       String serverResponseMessage = String.valueOf(conn.getContentEncoding()); 

       // Log.i("uploadFile", "HTTP Response is : " 
       //  + conn.getHeaderField("server") + ": " + serverResponseCode); 



       if(serverResponseCode == 200){ 

        runOnUiThread(new Runnable() { 
         public void run() { 

          String msg = "File Upload Completed.\n\n See uploaded file here : \n\n" 
              +" http://www.androidexample.com/media/uploads/"; 

          messageText.setText(msg); 
          Toast.makeText(UploadToServer.this, "File Upload Complete.", 
             Toast.LENGTH_SHORT).show(); 
         } 
        });     
       }  

       //close the streams // 
       fileInputStream.close(); 
       dos.flush(); 
       dos.close(); 

      } catch (MalformedURLException ex) { 

       dialog.dismiss(); 
       ex.printStackTrace(); 

       runOnUiThread(new Runnable() { 
        public void run() { 
         messageText.setText("MalformedURLException Exception : check script url."); 
         Toast.makeText(UploadToServer.this, "MalformedURLException", Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
      } catch (Exception e) { 

       dialog.dismiss(); 
       e.printStackTrace(); 

       runOnUiThread(new Runnable() { 
        public void run() { 
         messageText.setText("Got Exception : see logcat "); 
         Toast.makeText(UploadToServer.this, "Got Exception : see logcat ", 
           Toast.LENGTH_SHORT).show(); 
        } 
       }); 
       Log.e("Upload file to server Exception", "Exception : " 
               + e.getMessage(), e); 
      } 
      dialog.dismiss();  
      return serverResponseCode; 

     } // End else block 
    } 
0
public class getServerDataAsync extends AsyncTask<String, Void, String> { 

    String fileName; 
    HttpURLConnection conn = null; 
    DataOutputStream dos = null; 
    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 
    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    File sourceFile; 
    String msg; 

    @Override 
    protected String doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 

     fileName = arg0[0]; 
     sourceFile = new File(arg0[0]); 

     if (!sourceFile.isFile()) { 

      Log.e("uploadFile", "Source File not exist :" + uploadFilePath); 

      msg = "Source File not exist :" + uploadFilePath; 
     } else { 
      try { 

       // open a URL connection to the Servlet 
       FileInputStream fileInputStream = new FileInputStream(
         fileName); 
       URL url = new URL(upLoadServerUri); 

       HttpResponse respons; 

       // Open a HTTP connection to the URL 
       conn = (HttpURLConnection) url.openConnection(); 
       conn.setDoInput(true); // Allow Inputs 
       conn.setDoOutput(true); // Allow Outputs 
       conn.setUseCaches(false); // Don't use a Cached Copy 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("Connection", "Keep-Alive"); 
       conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
       conn.setRequestProperty("Content-Type", 
         "multipart/form-data;boundary=" + boundary); 
       conn.setRequestProperty("uploaded_file", fileName); 

       dos = new DataOutputStream(conn.getOutputStream()); 
       dos.writeBytes(twoHyphens + boundary + lineEnd); 
       dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
         + fileName + "\"" + lineEnd); 

       dos.writeBytes(lineEnd); 

       // create a buffer of maximum size 
       bytesAvailable = fileInputStream.available(); 

       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       buffer = new byte[bufferSize]; 

       // read file and write it into form... 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       while (bytesRead > 0) { 

        dos.write(buffer, 0, bufferSize); 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       } 

       // send multipart form data necesssary after file data... 
       dos.writeBytes(lineEnd); 
       dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

       StringBuilder builder = new StringBuilder(); 
       builder.append(conn.getResponseCode()).append(" ") 
         .append(conn.getResponseMessage()).append("\n"); 

       Map<String, List<String>> map = conn.getHeaderFields(); 
       for (Map.Entry<String, List<String>> entry : map.entrySet()) { 
        if (entry.getKey() == null) 
         continue; 
        builder.append(entry.getKey()).append(": "); 

        List<String> headerValues = entry.getValue(); 
        Iterator<String> it = headerValues.iterator(); 
        if (it.hasNext()) { 
         builder.append(it.next()); 

         while (it.hasNext()) { 
          builder.append(", ").append(it.next()); 
         } 
        } 

        builder.append("\n"); 
       } 

       Log.i("Response", builder.toString()); 

       // Responses from the server (code and message) 
       serverResponseCode = conn.getResponseCode(); 
       String serverResponseMessage = String.valueOf(conn 
         .getContentEncoding()); 

       // Log.i("uploadFile", "HTTP Response is : " 
       // + conn.getHeaderField("server") + ": " + 
       // serverResponseCode); 

       if (serverResponseCode == 200) { 

        msg = "File Upload Completed.\n\n See uploaded file here : \n\n" 
          + " http://www.androidexample.com/media/uploads/"; 

       } 

       // close the streams // 
       fileInputStream.close(); 
       dos.flush(); 
       dos.close(); 

      } catch (MalformedURLException ex) { 

       ex.printStackTrace(); 
       msg = "MalformedURLException Exception : check script url."; 

       Log.e("Upload file to server", "error: " + ex.getMessage(), 
         ex); 
      } catch (Exception e) { 

       e.printStackTrace(); 
       msg = "Got Exception : see logcat "; 

       Log.e("Upload file to server Exception", 
         "Exception : " + e.getMessage(), e); 
      } 

     } // End else block 

     return msg; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     messageText.setText(result); 
    } 

} 

呼叫异步类别为

new getServerDataAsync().execute("source url");