首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成RuntimeException的AsyncTask

生成RuntimeException的AsyncTask
EN

Stack Overflow用户
提问于 2013-07-16 01:02:52
回答 1查看 609关注 0票数 0

我写了一个从互联网上读取数据的AsyncTask扩展类。虽然代码在模拟器(GB) i-e中运行良好;它从互联网返回数据,但当我在我的手机(JB)上运行代码时,它没有返回任何东西。此外,代码在emualtor的logcat中创建了以下异常。代码如下:

代码语言:javascript
运行
复制
new userCred().execute(userCredentials);

public class userCred extends AsyncTask<String[], String, String>
{

    @Override
    protected String doInBackground(String[]... arg0) {

        ......

        startActivity(intent);

        return null; // because I am not returning anythign
    }

}

LOGCAT:

代码语言:javascript
运行
复制
07-15 21:49:56.768: W/System.err(1542): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
07-15 21:49:56.768: W/System.err(1542):     at android.os.Handler.<init>(Handler.java:121)
07-15 21:49:56.768: W/System.err(1542):     at android.widget.Toast.<init>(Toast.java:68)
07-15 21:49:56.768: W/System.err(1542):     at android.widget.Toast.makeText(Toast.java:231)
07-15 21:49:56.768: W/System.err(1542):     at com.umer.androiduetproject.LoginAccount.sendCredentialsForCheckingOnline(LoginAccount.java:71)
07-15 21:49:56.768: W/System.err(1542):     at com.umer.androiduetproject.LoginAccount$userCred.doInBackground(LoginAccount.java:124)
07-15 21:49:56.768: W/System.err(1542):     at com.umer.androiduetproject.LoginAccount$userCred.doInBackground(LoginAccount.java:1)
07-15 21:49:56.768: W/System.err(1542):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-15 21:49:56.768: W/System.err(1542):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
07-15 21:49:56.768: W/System.err(1542):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
07-15 21:49:56.768: W/System.err(1542):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
07-15 21:49:56.768: W/System.err(1542):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
07-15 21:49:56.768: W/System.err(1542):     at java.lang.Thread.run(Thread.java:1019)
07-15 21:50:24.169: W/System.err(1542): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
07-15 21:50:24.169: W/System.err(1542):     at android.os.Handler.<init>(Handler.java:121)
07-15 21:50:24.169: W/System.err(1542):     at android.widget.Toast.<init>(Toast.java:68)
07-15 21:50:24.169: W/System.err(1542):     at android.widget.Toast.makeText(Toast.java:231)
07-15 21:50:24.169: W/System.err(1542):     at com.umer.androiduetproject.LoginAccount.sendCredentialsForCheckingOnline(LoginAccount.java:71)
07-15 21:50:24.169: W/System.err(1542):     at com.umer.androiduetproject.LoginAccount$userCred.doInBackground(LoginAccount.java:124)
07-15 21:50:24.169: W/System.err(1542):     at com.umer.androiduetproject.LoginAccount$userCred.doInBackground(LoginAccount.java:1)
07-15 21:50:24.169: W/System.err(1542):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-15 21:50:24.179: W/System.err(1542):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
07-15 21:50:24.179: W/System.err(1542):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
07-15 21:50:24.179: W/System.err(1542):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
 07-15 21:50:24.179: W/System.err(1542):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
 07-15 21:50:24.179: W/System.err(1542):    at java.lang.Thread.run(Thread.java:1019)

JB LOGCAT:

代码语言:javascript
运行
复制
07-15 18:51:36.378: E/ActivityThread(1466): Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@b50afe10 that was originally bound here
07-15 18:51:36.378: E/ActivityThread(1466): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@b50afe10 that was originally bound here
07-15 18:51:36.378: E/ActivityThread(1466):     at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
07-15 18:51:36.378: E/ActivityThread(1466):     at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
07-15 18:51:36.378: E/ActivityThread(1466):     at android.app.ContextImpl.bindService(ContextImpl.java:1418)
07-15 18:51:36.378: E/ActivityThread(1466):     at android.app.ContextImpl.bindService(ContextImpl.java:1407)
07-15 18:51:36.378: E/ActivityThread(1466):     at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
 07-15 18:51:36.378: E/ActivityThread(1466):    at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
07-15 18:51:36.378: E/ActivityThread(1466):     at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
07-15 18:51:36.378: E/ActivityThread(1466):     at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
07-15 18:51:36.378: E/ActivityThread(1466):     at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
07-15 18:51:36.378: E/ActivityThread(1466):     at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
07-15 18:51:36.378: E/ActivityThread(1466):     at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
07-15 18:51:36.378: E/ActivityThread(1466):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-15 18:51:36.378: E/ActivityThread(1466):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
07-15 18:51:36.378: E/ActivityThread(1466):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
07-15 18:51:36.378: E/ActivityThread(1466):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
07-15 18:51:36.378: E/ActivityThread(1466):     at java.lang.Thread.run(Thread.java:856)
07-15 18:51:36.378: E/StrictMode(1466): null
07-15 18:51:36.378: E/StrictMode(1466): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@b50afe10 that was originally bound here
07-15 18:51:36.378: E/StrictMode(1466):     at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
07-15 18:51:36.378: E/StrictMode(1466):     at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
07-15 18:51:36.378: E/StrictMode(1466):     at android.app.ContextImpl.bindService(ContextImpl.java:1418)
07-15 18:51:36.378: E/StrictMode(1466):     at android.app.ContextImpl.bindService(ContextImpl.java:1407)
07-15 18:51:36.378: E/StrictMode(1466):     at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
07-15 18:51:36.378: E/StrictMode(1466):     at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
07-15 18:51:36.378: E/StrictMode(1466):     at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
07-15 18:51:36.378: E/StrictMode(1466):     at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
07-15 18:51:36.378: E/StrictMode(1466):     at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
07-15 18:51:36.378: E/StrictMode(1466):     at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
07-15 18:51:36.378: E/StrictMode(1466):     at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
07-15 18:51:36.378: E/StrictMode(1466):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-15 18:51:36.378: E/StrictMode(1466):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)

07-15 18:51:36.378: E/严格模式(1466):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 07-15 18:51:36.378: E/严格模式(1466):在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 07-15 18:51:36.378: E/严格模式(1466):在java.lang.Thread.run(Thread.java:856)

问候

EN

回答 1

Stack Overflow用户

发布于 2013-07-16 01:05:58

你正试图在后台线程上做受限制的事情。JellyBean在执行这条规则上变得更加严格,而GingerBread并非如此,这就是为什么你的模拟器上没有问题,但它在你的设备上崩溃了。改为将startActivity(intent)和任何其他UI交互代码移动到onPostExecute,或者使用处理程序将消息从AsyncTask发布到主线程。您实际上只想在AsyncTask中执行后台操作和潜在的阻塞操作。希望这能有所帮助

编辑:原来你是想在你的doInBackground()中显示一个吐司。这也是不允许的,因为您正在尝试与应该在主线程上接触的视图交互。删除该toast,改用Log或使用Handler实例来显示它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17659739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档