gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:51:42 26 4
gpt4 key购买 nike

我正在为 Android 使用名为 Sugar 的 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() 行是导致异常的行。奇怪的是,如果我将上面的任务声明为 Activity 的内部类,它工作正常,但如果我在单独的文件上声明任务,它会抛出此异常:

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$2.call(AsyncTask.java:264)
E/AndroidRuntime(17172): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/AndroidRuntime(17172): ... 5 more
E/AndroidRuntime(17172): Caused by: java.lang.RuntimeException: Cant create handler inside thread that has not called Looper.prepare()

我看不出有什么不同,因为我看不出有任何意义。

最佳答案

您正在尝试从后台线程访问/更新 UI。 log cat 最后一句中抛出的异常表示“这些”类型的交互。如果它是 Activity 的内部类,这也会崩溃。

证据是您正在传递 context。另一个问题,因为这也可能是问题所在。这是 Activity 的上下文还是 AsyncTask 的上下文?它需要什么上下文?

关于android - 如果声明为 Activity 的内部类或在单独的文件中,为什么 AsyncTask 的行为会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com