通过Json POST上传时获取实际的json响应

时间:2013-04-26 07:45:53

标签: android json

我成功上传后需要找到Json响应.. 示例:

{"0":["uploaded","34.jpg","status","success"]}

但是我上传后只能从我的代码获得服务器响应。像

行:200

我的代码:

public int uploadFile(String sourceFileUri) {        
         try{
            String upLoadServerUri = "http://192.168.1.105/ui-design1/newremote/publicationDocuments";
            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()) {
             Log.e("uploadFile", "Source File Does not exist");
             return 0;
            }
                try { // open a URL connection to the Servlet
                 FileInputStream fileInputStream = new FileInputStream(sourceFile);
                 URL url = new URL(upLoadServerUri);
                 conn = (HttpURLConnection) url.openConnection(); // Open a HTTP  connection to  the URL
                 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("pub_img", fileName); 

                 dos = new DataOutputStream(conn.getOutputStream());

                 dos.writeBytes(twoHyphens + boundary + lineEnd); 
                 dos.writeBytes("Content-Disposition: form-data; name=\"pub_img\";filename=\""+ fileName + "\"" + lineEnd);
                 dos.writeBytes(lineEnd);

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

                 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);

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


                 Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
                 if(serverResponseCode == 200){
                     runOnUiThread(new Runnable() {
                          public void run() {

// tv.setText(“文件上传已完成。”);                                   Toast.makeText(getApplicationContext(),“File Upload Complete。”,Toast.LENGTH_SHORT)。show();                               }                           });
                     }

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

            } catch (MalformedURLException ex) {  
                dialog.dismiss();  
                ex.printStackTrace();
                Toast.makeText(getApplicationContext(), "MalformedURLException", Toast.LENGTH_SHORT).show();
                Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
            } catch (Exception e) {
                dialog.dismiss();  
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Exception : " + e.getMessage(), Toast.LENGTH_SHORT).show();
                Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e);  
            }
            dialog.dismiss();       
         }catch (Exception e) {
            System.out.println(e);
        }
            return serverResponseCode;  
           } 

如何在此检索实际响应..

2 个答案:

答案 0 :(得分:0)

这是因为您正在检索获取InputStream所需的请求的响应消息,然后从中检索数据,例如

    serverResponseCode = conn.getResponseCode();
    String serverResponseMessage = conn.getResponseMessage();
    InputStream in = conn.getInputStream();

    byte data[] = new byte[1024];
    int counter = -1;
    String jsonString = "";
    while( (counter = in.read(data)) != -1){
         jsonString += new String(data, 0, counter);
     }

     Log.d("Debug", " JSON String: " + jsonString);

答案 1 :(得分:0)

通常我会得到我的json_object:

try {                                                              
  BufferedReader br = new BufferedReader(                                                                       
  new InputStreamReader(is));                                                              
  StringBuilder sb = new StringBuilder();                                                             
  String line = "";                                                         
  while ((line = br.readLine()) != null) {                                                              
    sb.append(line + "\n");                                                           
  }                                                         
  is.close();                                                       
  result = sb.toString();                                                           
  Log.i("DELETE","result = "+result);                                                         
} catch (Exception e) {                                                          
  Log.e("log_tag", "Error converting result " + e.toString());                                                       
}                                                          
return result;
}

然后在Async-Call的PostExecute()中读取我的JSON-String:

@Override
protected void onPostExecute(Void v) {
try {
    JSONObject object = new JSONObject(result);
    JSONArray Jarray = object.getJSONArray("TABLE_NAME");
    myUserList.clear();
    for (int i = 0; i < Jarray.length(); i++) {
       JSONObject Jasonobject = Jarray.getJSONObject(i);
       String name = Jasonobject.getString("name");  
       // ...