Android从睡眠模式醒来会导致http调用的ClientProtocolException

Android从睡眠模式醒来会导致http调用的ClientProtocolException,android,httpclient,apache-httpclient-4.x,sleep-mode,Android,Httpclient,Apache Httpclient 4.x,Sleep Mode,当设备进入“睡眠”或省电模式(屏幕变黑)时,当您按下电源按钮恢复屏幕时,所有设备看起来都很好,功能正常。但是,当我尝试执行任何HTTP调用时(使用DefaultHttpClient),我会得到ClientProtocolException异常。然后我必须退出应用程序并返回,一切正常。我知道有新的URLConnection包可用,但重构需要一些时间。有没有办法纠正这个问题 下面是一个失败的代码示例,但同样,它在设备休眠之前工作正常: public JSONObject mediaAmazonUpl

当设备进入“睡眠”或省电模式(屏幕变黑)时,当您按下电源按钮恢复屏幕时,所有设备看起来都很好,功能正常。但是,当我尝试执行任何HTTP调用时(使用
DefaultHttpClient
),我会得到
ClientProtocolException
异常。然后我必须退出应用程序并返回,一切正常。我知道有新的URLConnection包可用,但重构需要一些时间。有没有办法纠正这个问题

下面是一个失败的代码示例,但同样,它在设备休眠之前工作正常:

public JSONObject mediaAmazonUploadAuthParams(String key, String contentType, Boolean publicRead) throws MyException {
    JSONObject authParams = null;
    HttpClient httpClient = new DefaultHttpClient();
    ResponseHandler<String> responseHandler = new BasicResponseHandler();
    HttpPost postMethod = new HttpPost(getBaseUrl() + "myapi");  
    postMethod.setHeader("SessionToken", mSessionToken);
    int versionCode = Utilities.getVersionCode(GlobalState.getInstance().context);
    String versionName = "0.0.0";
    String clientHeader = "android-0.0.0"; 
    postMethod.setHeader("Client", clientHeader);
    postMethod.setHeader( "Content-Type", "application/json");

    GatekeeperResult result;
    JSONObject postJson = new JSONObject();
    try {
        postJson.put("key", key);
        postJson.put("contentType", contentType);
        postJson.put("publicRead", publicRead);
        String postString = postJson.toString();
        postMethod.setEntity(new StringEntity(postString));
        String response = httpClient.execute(postMethod, responseHandler);
        result = new Result(new JSONObject(response));
    } catch (Exception e) {
        Log.e("Client","mediaAmazonUploadAuthParams(), Error httpClient execute ",e);
        throw new MyException(e);
    }
注意:这不仅仅发生在进入睡眠状态的屏幕上……也是一个时间因素(空闲时间超过10分钟)。你认为这可能与由于无所事事而从记忆中提取某些东西有关吗?
提前谢谢

好的。把这件事搞清楚了。这是一个误认的案例……某种程度上。发生的情况是,当前会话因有人使用同一帐户在不同的移动设备上登录而无效。然后,服务器使上一个会话无效。一切正常,但他们没有返回401,而是返回了301,从而触发了HTTPClient中的ClientProtocolException。Doh。虚度的一天。谢谢大家的帮助

发布完整的StackTrace。。!您是否在多个设备上重新生成了此异常?似乎在多个设备上都会发生。我将尝试获取堆栈跟踪,但它是难以捉摸的…今天它没有抛出错误,而昨天它一直在发生。只是用堆栈跟踪更新…我想下一步将是打印JSON和其他好东西的内容。。。
05-28 11:36:20.891: E/GatekeeperApiClient(8999): org.apache.http.client.ClientProtocolException
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:589)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:685)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:659)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:648)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at com.invocore.fastfield.gatekeeper.GatekeeperApiClient.mediaAmazonUploadAuthParams(GatekeeperApiClient.java:906)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at com.invocore.fastfield.utility.LibraryUtils.saveFormMedia(LibraryUtils.java:156)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at com.invocore.fastfield.FormActivity$submitFormResultTask.doInBackground(FormActivity.java:2562)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at com.invocore.fastfield.FormActivity$submitFormResultTask.doInBackground(FormActivity.java:1)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at java.lang.Thread.run(Thread.java:838)
05-28 11:36:20.891: E/GatekeeperApiClient(8999): Caused by: org.apache.http.ProtocolException: Received redirect response HTTP/1.1 301 Moved Permanently but no location header
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at org.apache.http.impl.client.DefaultRedirectHandler.getLocationURI(DefaultRedirectHandler.java:103)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at org.apache.http.impl.client.DefaultRequestDirector.handleResponse(DefaultRequestDirector.java:944)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:491)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:587)
05-28 11:36:20.891: E/GatekeeperApiClient(8999):    ... 13 more