【问题标题】:Get Actual json response while upload through Json POST通过 Json POST 上传时获取实际的 json 响应
【发布时间】:2013-04-26 07:45:52
【问题描述】:

我需要在我成功上传后找到 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(), "文件上传完成。", 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;  
           } 

我怎样才能在这个中检索实际响应..

【问题讨论】:

    标签: android json


    【解决方案1】:

    那是因为您正在检索请求的响应消息,例如您需要获取 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);
    

    【讨论】:

    • 现在我需要再添加一个响应......我可以在哪里添加
    • 我只想在我的请求中再发送一个参数
    • 例子:conn.setRequestProperty("token", "sdasdad");
    • 你回答了你自己的问题用户 setRequestProperty
    【解决方案2】:

    通常我会像这样得到我的 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;
    }
    

    然后在异步调用的 PostExecute() 中读取我的 JSON 字符串:

    @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");  
           // ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      相关资源
      最近更新 更多