我有一个显示列表视图的活动。单击项目时,将启动第二个活动,该活动运行一个 AsyncTask,根据单击的项目获取远程 URL,解析结果,然后将这些结果显示到另一个列表视图中。当异步任务运行时,我有一个“正在加载”视图,仅显示图像和文本。问题是,如果我启动运行异步任务的活动,然后按回键并启动所述活动的另一个实例,我会强制关闭。
我努力了
private class getlist extends AsyncTask implements OnDismissListener{
...
@Override
public void onDismiss(DialogInterface arg0) {
this.cancel(true);
}
}
但问题仍然存在。
我也放了
if(!isCancelled()){
setContentView(R.layout.list);
...
etc.
}
进入我的 onPostExecute 调用,但这要么不会阻止视图切换,要么问题是其他问题。
logcat 显示“已恢复时出现意外恢复..收到 RemoteException 发送 setActive(false) 通知”
然后在日志中再往下一点,“java.net.SocketTimeoutException:套接字未连接”
我该如何解决这个问题?
update:
E/AndroidRuntime(19379): Uncaught handler: thread AsyncTask #2 exiting due to uncaught exception
E/AndroidRuntime(19379): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(19379): at android.os.AsyncTask$3.done(AsyncTask.java:200)
E/AndroidRuntime(19379): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime(19379): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime(19379): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime(19379): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime(19379): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
E/AndroidRuntime(19379): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
E/AndroidRuntime(19379): at java.lang.Thread.run(Thread.java:1096)
E/AndroidRuntime(19379): Caused by: java.lang.NullPointerException
E/AndroidRuntime(19379): at com.metatroid.android.swim.ThreadViewer.getPosts(ThreadViewer.java:153)
E/AndroidRuntime(19379): at com.metatroid.android.swim.ThreadViewer$getlist.doInBackground(ThreadViewer.java:70)
E/AndroidRuntime(19379): at com.metatroid.android.swim.ThreadViewer$getlist.doInBackground(ThreadViewer.java:1)
E/AndroidRuntime(19379): at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime(19379): at java.util.concurrent.FutureTask$Sync.innerRun
这个问题的实际解决方案是使用 ThreadSafeClientConnManager 作为 ClientConnectionManager
e.g.
BasicHttpParams params = new BasicHttpParams();
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
final SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory();
schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));
ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
DefaultHttpClient httpclient = new DefaultHttpClient(cm, params);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)