gpt4 book ai didi

android - 如何将上下文从 Activity 传递到 AsyncTask 类以启动新 Activity ?

转载 作者:搜寻专家 更新时间:2023-11-01 09:01:07 25 4
gpt4 key购买 nike

我正在尝试将 Context 从 Activity 传递到 AsyncTask 类。问题是上下文为空。

在我的 AsyncTask 类中,我有以下内容

 public class LoginService extends AsyncTask<String, Void, String> {

....

public Context context;


public LoginService(){

}

public LoginService(String username, String password){
this.username=username;
this.password=password;
}


@Override
protected String doInBackground(String... params) {

String userID = login(username, password);

return userID;
}

protected void onPostExecute(String result){

loginSuccess = result;

if (loginSuccess!=fail){
Intent casesActivity = new Intent(context, CasesActivity.class);
casesActivity.putExtra("username", result);
context.startActivity(casesActivity);
}

public void setContext(Context newContext){
context = newContext;
}

在我的 Activity 中,当我点击一个按钮时,我有以下代码:

 public void onClick(View view) {

if ((editTextPassword.getText().toString() != null & editTextUsername.getText().toString() != null)){

new LoginService().setContext(getApplicationContext());
new LoginService(editTextUsername.getText().toString(), editTextPassword.getText().toString()).execute();

}
else{
//Display Toaster for error
Toast.makeText(getApplicationContext(),"Please enter your details", Toast.LENGTH_LONG).show();
}
}

Intent 从未创建,应用程序突然崩溃,因为上下文为空。我似乎找不到解决此问题的方法。

最佳答案

对于 最小 代码更改,保留对 LoginTask 的引用,而不是创建两个单独的实例:

LoginService l = new LoginService(editTextUsername.getText().toString(), editTextPassword.getText().toString());

l.setContext (getApplicationContext());

l.execute();

您的代码每次都会创建一个新的 LoginTask,并且由于您有两个独立的构造函数,因此 context 始终为 null(第二个构造函数不包含上下文,因为你创建了一个单独的对象!)

但是,如果您希望将 Context 与用户信用一起传递,请去掉无参数构造函数并更改剩余的构造函数,使其看起来像:

public LoginService(Context context,String username, String password){
this.context = context;
this.username=username;
this.password=password;
}

拥有什么都不做的空构造函数通常毫无意义,因此请调整有用的构造函数,使其更有用

关于android - 如何将上下文从 Activity 传递到 AsyncTask 类以启动新 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844443/

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