android-如果将AsyncTask声明为Activity的内部类或在单独的文件上,为什么行为会有所不同?

android-如果将AsyncTask声明为Activity的内部类或在单独的文件上,为什么行为会有所不同?,第1张

概述我正在使用一个名为Sugar的AndroidORM将模型保留在数据库中,并且我在AsyncTask中使用它.这是它的声明:publicclassLoginTaskextendsAsyncTask<Object,Integer,String>{privateContextcontext;privateProgressDialogprogressDialog;publicLoginTas

我正在使用一个名为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的内部类或在单独的文件上,为什么行为会有所不同?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1073358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存