2011-08-04 60 views
2
public class HTTPPoster { 
    public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException 
    { 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost request = new HttpPost(url); 

     HttpEntity entity; 
     StringEntity s = new StringEntity(c.toString()); 
     s.setContentEncoding((Header) new BasicHeader(HTTP.DEFAULT_CONTENT_CHARSET, "application/json")); 
     entity = s; 
     request.setEntity(entity); 

     HttpResponse response; 

     response = httpclient.execute(request); 

     return response; 
    } 

} 

這是代碼,但response = http.client.execute(request)沒有得到迴應。我找不到原因。沒有得到響應response = httpclient.execute(request);

+1

對不起Demet我很想回答你的問題,但你給我們沒有太多的工作。最有禮貌的方式是這張紙條。只是要求代碼不是最好的行爲。 什麼res – Janusz

+0

你得到的迴應是什麼?它是否爲空?有拋出異常嗎? – Janusz

回答

0

首先嚐試通過做這些2步

變化

public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException 

的返回類型更改爲String

public static String doPost(String url, JSONObject c) throws ClientProtocolException, IOException 

變化

HttpResponse response; 

String response; 

現在檢查響應字符串?它仍然是空嗎?


1

您可以檢查,如果您是通過下面的代碼獲得來自服務器的響應與否:

HttpResponse response = httpClient1.execute(request); 
        Log.v("response code", response.getStatusLine() 
          .getStatusCode() + ""); 

如果您得到的響應代碼值200,那麼你是從服務器獲取數據,並如果響應代碼值> = 300,那麼你的服務器端出現錯誤。

+0

響應不是'HtppResponse',而是'String'。或者你怎麼把它變成一個'HttpResponse'?這是否依賴於'ResponseHandler'? – Peterdk

+0

@Peterdk:請參閱下面的問題,我問你的評論後。我給出的答案是正確的。您請更新您的知識。請參閱我的問題在這裏:http://stackoverflow.com/questions/8365741/is-httpresponse-string/8365974#8365974 – Shruti

+0

如果您提供'responsehandler',則方法返回'T'。所以也有一個通用的'execute'方法,在'BasicResponseHandler'的情況下它會返回一個字符串。 – Peterdk

3

您應該異步調用該方法。然後它將使用相同的代碼。 的這兩行代碼添加到您的項目

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

和 使最低SDK版本9

+0

非常感謝你!我發現所有http請求的例子,並沒有工作。添加代碼後,所有示例都可以正常工作!爲什麼這些例子沒有提到你的代碼? –

+0

@YiFeng你也可以使用android的asyncTask特性來達到同樣的效果。這裏是一個到asyncTask http://developer.android的快速鏈接。COM /參考/安卓/ OS/AsyncTask.html。你應該在doBackgroundTask函數中調用你的http請求。在主線程中執行阻塞任務在Android中不是首選。阻止任務應該在後臺線程中完成 – kishore

+0

夢幻般的答案 - 非常有幫助 – user1418706

0

這是一個權限問題。

將這行<uses-permission android:name="android.permission.INTERNET" />添加到您的清單文件並重建。