LoopJ Android异步Http客户端 - java.net.SocketTimeoutException

问题描述 投票:2回答:1

我使用来自http://loopj.com/的库进行异步发布请求,但是我得到了socketTimeOutException,我尝试通过设置client.setTimeOut(50000);仍然得到同样的错误。

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams params = new RequestParams("type", "myType");
    client.post("service.php", params, new AsyncHttpResponseHandler() {

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            System.out.println("Failure");
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
            System.out.println("Success");
        }

    });
}

}

我尝试了httpclient的相同网址,它的工作原理如下:

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://www.example.com/service.php");
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("type", "myType"));
        post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = client.execute(post);
        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String line = "";
        while ((line = rd.readLine()) != null) {
            System.out.println(line);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}
java android post asynchronous
1个回答
0
投票

我发现AsyncHttpClient实际默认为10秒超时。如果您的请求需要更长时间,您将看到抛出SocketTimeoutException。

调整这个非常简单。只需执行以下操作:

final int DEFAULT_TIMEOUT = 20 * 1000;
AsyncHttpClient aClient = new AsyncHttpClient();
aClient.setTimeout(DEFAULT_TIMEOUT);
//... continue as normal
© www.soinside.com 2019 - 2024. All rights reserved.