Android- org.apache.http.ProtocolException:服务器无法响应有效的HTTP响应

时间:2014-03-03 07:37:41

标签: android http android-asynctask apache-httpclient-4.x rest-client

我正在尝试通过我的Android应用程序向REST服务发送HTTP post请求,并且客户端作为异步任务运行。这是客户:

@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接收数据。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为您使用的是错误的HTTP方法。只需检查HTTP方法是否正确,只是尝试将json作为请求体的一部分。