2016-04-29 101 views
1

我想从httppost请求获得响应。我得到的网络响应如200,405,404,但我没有得到来自服务器的价值。我尝试了很多,但没有得到回应。请帮助...如何获得HttpPost的响应

我的代码如下─

私人无效UploadPost(){

 SharedPreferences sharedPreferences1 = getSharedPreferences("DATA", Context.MODE_PRIVATE); 
     String ID = sharedPreferences1.getString("id", ""); 
     @SuppressWarnings("deprecation") 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(Url.addOffer_url); 

     Log.e("uploadFile", "Source File Path " + picturePath); 
     File sourceFile1 = new File(picturePath); 
     if (!sourceFile1.isFile()) { 
      Log.e("uploadFile", "Source File Does not exist"); 
      imgUploadStatus = "Source File Does not exist"; 
     } 


     try { 
      AndroidMultiPartEntity entity = new AndroidMultiPartEntity(); 
      File sourceFile = new File(picturePath); 
      MultipartEntity entity1 = new MultipartEntity(
        HttpMultipartMode.BROWSER_COMPATIBLE); 
      // Adding file data to http body 


      entity.addPart("retailer_id", new StringBody(ID)); 
      entity.addPart("title", new StringBody(addoffertitle)); 
      entity.addPart("description", new StringBody(addofferdesc)); 
      entity.addPart("keyword", new StringBody(addofferkeyword)); 
      entity.addPart("offer_id", new StringBody(OfferListing_Id)); 
      // entity.addPart("payment_status",new StringBody(paymentStatus)); 
      // if(!picturePath.equals("")) 
      entity.addPart("offer_image", new FileBody(sourceFile)); 
      /* else 
       entity.addPart("old_pic",new StringBody(Image_Path));*/ 
      httppost.setEntity(entity); 

      Log.d("httppost success", "httppost"); 

      //Run a api for net conn check 
      try { 

       String responseString= new String(); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity8 = response.getEntity(); 
       if(entity8 !=null){ 
        responseString = EntityUtils.toString(entity8, "UTF-8"); 
        System.out.println("Response body: " + responseString); 
       } 



       statusCode = 200; 

      } catch (FileNotFoundException e) { 
       Log.e("log_tag1", "Error FileNotFoundException new service" + e.toString()); 
       result = "FileNotFoundException"; 
      } catch (SocketTimeoutException e) { 
       Log.e("log_tag2", "SocketTimeoutException new service " + e.toString()); 
       result = "SocketTimeoutException"; 
      } catch (Exception e) { 
       Log.e("log_tag3", "Error converting OtherException new service " + e.toString()); 
       result = "OtherException"; 
      } 


      if (statusCode == 200) { 
       // Server response 
       responseString = "success"; 



       Log.e("complete success", "Response from server: " + responseString); 
      } else if (statusCode == 404) { 
       responseString = "page not found"; 


       Log.e("complete page not found", "Response from server: " + responseString); 

      } else if (statusCode == 405) { 
       responseString = "no net"; 


       Log.e("complete no net", "Response from server: " + responseString); 

      } else { 
       responseString = "other"; 


       Log.e("complete other", "Response from server: " + responseString); 

      } 

     } catch (Exception e) { 
      responseString = e.toString(); 
      responseString = "other"; 
      Log.e("complete", "Response from server: " + responseString); 

     } 

    } 

我想从httppost.i获得网络的响应,但我没有得到回应来自服务器的价值。我尝试了很多,但我没有得到回复。请帮助...

+0

什么样的网络响应代码你好吗?是200,400还是它是什么? – ishmaelMakitla

+1

嗨,感谢您的回复。 @ ishmaelMakitla我从服务器获得200响应,我想获得json值。 –

+0

'System.out.println(“Response:”+ s);'。这应该是'System.out.println(“Response:”+ s.toString());'。它打印什么?这不是服务器返回的值,而是文本。由线组成。页面。可能是一个html页面或json文本。 – greenapps

回答

0

尝试使用EntityUtils而不是BufferedReader。举例来说,像这样:

String responseString= new String(); 
HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity = response.getEntity(); 
if(entity !=null){ 
    responseString = EntityUtils.toString(entity, "UTF-8"); 
} 

看所选答案here - 它显示了如何获得响应机构400 HTTP响应。你也可以看看this example。如果您正在使用JSON有效载荷的工作,也许你可能要考虑使用排球 - here are some examples for PUT, POST, and GET requests using Volley

+0

喜@ ishmaelMakitla,无法得到响应而不抽风?实际上需要获得对服务器响应的响应?按照这个链接http://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/ – Suman

+0

你可以得到没有使用Volley的反应,我只建议Volley因为我发现它更易于使用 - 但是请尝试建议的答案,并让我知道你是否还没有得到任何答复。 – ishmaelMakitla

+0

对不起@ishmaelMakitla我没有得到任何回应 –

0

您可以尝试取而代之的是

InputStream inputStream = httpResponse.getEntity().getContent(); 
InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
StringBuilder stringBuilder = new StringBuilder(); 
String bufferedStrChunk = null; 
while((bufferedStrChunk = bufferedReader.readLine()) != null){ 
     stringBuilder.append(bufferedStrChunk); 
} 

HttpEntity entity8 = response.getEntity(); 
       if(entity8 !=null){ 
        responseString = EntityUtils.toString(entity8, "UTF-8"); 
        System.out.println("Response body: " + responseString); 
       }