我注意到在AsyncTask中发生崩溃的某些设备上存在问题。它在我的平板电脑和智能手机上没有问题,但我的朋友在他的设备上遇到问题。Android - AsyncTask上的RuntimeException
这是我的AsyncTasks中的一个的主体的实例:
protected String doInBackground(String... params) {
String result = "";
HttpClient httpclient = GlobalValues.getHttpClient();
HttpPost httppost = new HttpPost(String.format(GlobalValues.getServiceUrl() + "%s", params[0]));
try {
HttpResponse response = httpclient.execute(httppost, GlobalValues.getLocalContext());
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
result = GlobalValues.convertStreamToString(instream);
Log.i(params[0], params[0] + ": " + result);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
LOG:
FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
...
Caused by: java.lang.NullPointerException
...
在线路中发生的错误:
HttpResponse response = httpclient.execute(httppost, GlobalValues.getLocalContext());
httppost包含服务器url,它是在GlobalValues.getServiceUrl()和params []的帮助下在方法内部设置的。会话cookie存储在一个HttpContext中,它是从GlobalValues.getLocalContext()中检索的,当应用程序第一次启动并由我的所有AsyncTasks共享时设置。我不明白可能抛出NullPointerException的位置。
我看过其他问题/答案,但还没有找到解决方案。
- 的LocalContext共享
- InputStream的在响应的HttpResponse闭合= httpclient.execute(httppost,GlobalValues.getLocalContext())。
有没有人遇到过这个& /知道可能是什么问题?
编辑:
启动活动 -
private DefaultHttpClient httpclient;
private HttpContext localContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
httpclient = new DefaultHttpClient();
localContext = new BasicHttpContext();
CookieStore cookieStore = new BasicCookieStore();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
GlobalValues.setHttpClient(httpclient);
GlobalValues.setLocalContext(localContext);
GlobalValues -
protected static DefaultHttpClient httpclient;
protected static HttpContext localContext;
public static final DefaultHttpClient getHttpClient() {
return httpclient;
}
public static final HttpContext getLocalContext() {
return localContext;
}
public static final void setHttpClient(DefaultHttpClient httpclient) {
GlobalValues.httpclient = httpclient;
}
public static final void setLocalContext(HttpContext localContext) {
GlobalValues.localContext = localContext;
}
更新:我已经发现,当有人试图恢复应用程序的问题只发生。我通过在GlobalValues.getHttpClient()和GlobalValues.getLocalContext()中添加“if(null)re-instantiate variable”来阻止应用程序崩溃。但是,存储在LocalContext中的会话cookie会丢失。任何想法如何重新实例化值或变量而不会丢失数据?
该行中的'NullPointerException'意味着'httpclient'已经'null' - 从您的代码指向'GlobalValues.getHttpClient()'。你能给我们来源吗? – dst
我忘了HttpClient - 我已经按照你的要求添加了代码段 – lgdroid57