0

我想通過我的android應用程序發送HTTP POST請求到REST服務,並且客戶端作爲異步任務運行。這裏是客戶端:Android- org.apache.http.ProtocolException:服務器無法響應一個有效的HTTP響應

@Override 
protected Void doInBackground(Void... params) { 

    String address = "http://xxx.xx.x.xxx:8080/rest/manageUser/create"; 
    StringBuilder stringBuilder = null; 
    ArrayList<NameValuePair> postParameters; 
    try { 
     HttpPost httpPost = new HttpPost(address); 


     postParameters = new ArrayList<NameValuePair>(); 
     postParameters.add(new BasicNameValuePair("userId", userId)); 
     postParameters.add(new BasicNameValuePair("firstName", firstName)); 
     postParameters.add(new BasicNameValuePair("lastName", lastName)); 
     postParameters.add(new BasicNameValuePair("mobileNumber", 
       mobileNumber)); 
     postParameters.add(new BasicNameValuePair("loginStatus", 
       loginStatus)); 

     httpPost.setEntity(new UrlEncodedFormEntity(postParameters)); 

     HttpClient client = new DefaultHttpClient(); 
     HttpResponse response; 
     stringBuilder = new StringBuilder(); 

     response = client.execute(httpPost); 

     HttpEntity entity = response.getEntity(); 
     InputStream stream = entity.getContent(); 

     int b; 
     while ((b = stream.read()) != -1) { 
      stringBuilder.append((char) b); 
     } 

     // System.out.println(stringBuilder); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    JSONObject jobj = null; 

    try { 
     jobj = new JSONObject(stringBuilder.toString()); 
     System.out.println(jobj.toString()); 
    } catch (Exception ex) { 

     ex.printStackTrace(); 
    } 
    return null; 
} 

此外,當我創建客戶端作爲獨立的Java類它工作正常。但是,當我如上面用它從我的Android應用程序作爲一個異步任務,我得到以下異常:

at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
at com.example.hello.service.client.CreateUser.doInBackground(CreateUser.java:64) 
at com.example.hello.service.client.CreateUser.doInBackground(CreateUser.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:288) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:841) 
Caused by: org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response 
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:93) 
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) 
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180) 
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
... 10 more 
org.json.JSONException: End of input at character 0 of 
at org.json.JSONTokener.syntaxError(JSONTokener.java:450) 
at org.json.JSONTokener.nextValue(JSONTokener.java:97) 
at org.json.JSONObject.<init>(JSONObject.java:155) 
at org.json.JSONObject.<init>(JSONObject.java:172) 
at com.example.hello.service.client.CreateUser.doInBackground(CreateUser.java:82) 
at com.example.hello.service.client.CreateUser.doInBackground(CreateUser.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:288) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:841) 

任何人都可以提出可能是什麼問題。同樣在我的休息服務中,我使用@FormParam接收數據。任何幫助,將不勝感激。

回答

0

我認爲你使用錯誤的HTTP方法。只需檢查HTTP方法是否正確,然後嘗試獲取作爲請求主體的一部分的json。