2015-03-25 74 views
0

好了,所以我在一個新的類創建的方法,並呼籲它從我的活動try catch塊,當我把它與通過我的字符串值,我的問題出現了...Android的HTTP POST錯誤

我的問題之後執行下述方法之後開始:

HttpResponse httpresponse = httpclient.execute(httppostreq); 

它去捕捉(IOException異常e)在我的活動,當我試圖打印響應字符串它給了我來自服務器的響應!!!!

所以,問題是,當我試圖值傳遞給POST它應該返回一些數據,但是失敗了,它是從服務器返回空消息

提示: 將出現空消息,如果沒有值

jsonobj.put("screenType", requestString); 

所以我通過了價值或不?以及爲什麼它會導致異常?

public void postData(String requestString) throws JSONException, ClientProtocolException, IOException { 

    // Create a new HttpClient and Post Header 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    JSONObject jsonobj = new JSONObject(); 
    jsonobj.put("screenType", requestString); 
    //jsonobj.put("old_passw", "306"); 
    HttpPost httppostreq = new HttpPost("mysite.org"); 
    StringEntity se = new StringEntity(jsonobj.toString()); 
    se.setContentType("application/json;charset=UTF-8"); 
    se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8")); 
    httppostreq.setEntity(se); 
    HttpResponse httpresponse = httpclient.execute(httppostreq); 

    Log.i("in try", httpresponse.toString()); 
    String responseText=null; 

    try { 

     responseText=EntityUtils.toString(httpresponse.getEntity()); 
    } catch (Exception e) { 

     // TODO: handle exception 
     e.printStackTrace(); 
     Log.i("in Exception",e.toString()); 
     Log.i("arse exception", httpresponse.toString()); 
    } 
} 

我還添加了互聯網permisssion

<uses-permission android:name="android.permission.INTERNET" /> 

回答

0

您不能在主線程網絡請求。你會得到你現在看到的錯誤。您需要使用AsyncTask或者您需要創建一個新的線程。就我個人而言,我會使用AsyncTask。當您使用AsyncTask時,您可以使用onPostExecute方法將值返回給主線程。

參見:NetworkOnMainThreadException

+0

我在第一次活動中沒有做第二次活動 – 2015-03-26 06:06:30

+0

如果您在主線程上進行調用,會發現錯誤。您必須在背景上撥打電話(例如AsynTaskLoader) – vincent091 2015-03-26 08:13:43

+0

在我的實例活動中,我有一個按鈕,當用戶單擊它時,它將打開攝像頭以讀取條形碼,並從此處打開另一個活動,並在打開創建方法我發送請求是錯誤的發送它在佈局的活動? – 2015-03-27 08:18:16

0

文森特說,你不能在UI線程中執行網絡請求,它會給你一個奇怪的例外,但不是使用的AsyncTask如果你的活動旋轉,因爲這將被銷燬Infographic顯示,我可以推薦你使用Robospice它是我使用過的最好的網絡框架,它很容易使用,祝你好運。