我正在使用一个名为Sugar的AndroID ORM将模型保留在数据库中,并且
我在AsyncTask中使用它.
这是它的声明:
public class LoginTask extends AsyncTask<Object, Integer, String> { private Context context; private ProgressDialog progressDialog; public LoginTask(Context context) { this.context = context; } @OverrIDe protected voID onPreExecute() { progressDialog = new ProgressDialog(context) { { setMessage("Authenticating..."); setTitle("Login"); setCancelable(false); setIndeterminate(true); show(); } }; } @OverrIDe protected String doInBackground(Object... params) { String email = (String) params[0]; String password = (String) params[1]; try { User user = LoginWebService.loginUser(email, password, context); user.save(); } catch (CommunicationException e) { e.printstacktrace(); return e.getMessage(); } return null; } @OverrIDe protected voID onPostExecute(final String result) { progressDialog.dismiss(); }}
上面的user.save()行将用户模型保存在db中,这是导致异常的行.奇怪的是,如果我将上面的任务声明为活动的内部类,则可以正常工作,但是如果我将任务声明为单独的文件,则会抛出此异常:
E/AndroIDRuntime(17172): at com.app.task.LoginTask.doInBackground(LoginTask.java:47)E/AndroIDRuntime(17172): at com.app.task.LoginTask.doInBackground(LoginTask.java:1)E/AndroIDRuntime(17172): at androID.os.AsyncTask.call(AsyncTask.java:264)E/AndroIDRuntime(17172): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)E/AndroIDRuntime(17172): ... 5 moreE/AndroIDRuntime(17172): Caused by: java.lang.RuntimeException: Cant create handler insIDe thread that has not called Looper.prepare()
我看不到有什么区别,因为我看不到任何意义.
解决方法:
您正在尝试从后台线程访问/更新UI.在log cat的最后一句中引发的异常表示“这些”类型的交互.如果它是活动的内部类,这也会崩溃.
证明是您通过了上下文.另一个问题,因为那也可能是问题.这是活动的上下文还是AsyncTask的上下文?它需要什么环境?
总结以上是内存溢出为你收集整理的android-如果将AsyncTask声明为Activity的内部类或在单独的文件上,为什么行为会有所不同?全部内容,希望文章能够帮你解决android-如果将AsyncTask声明为Activity的内部类或在单独的文件上,为什么行为会有所不同?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)