创建了一些AsyncTask类,但我创建了它们与活动类分开。
onPostExecute(..)的问题:
public class UserLoginTask extends AsyncTask<Void, Void, User> {
private Context mContext;
.....
@Override
protected void onPostExecute(final User registedUser) {
mAuthTask = null;
mloginHelper.showProgress(false,mLoginFormView,mProgressView);
if (registedUser == null) {
mloginHelper.registerUser(mEmail, mPassword);
} else if (registedUser.getPassword().equals(mPassword)) {
mContext.getApplicationContext().setLoggedUser(registedUser, mRememberMe);
mContext.finish();
} else {
mPasswordView.setError(mContext.getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
.....
}
与AsyncTask的成员对象相关的所有方法都无法在其中解析。
答案 0 :(得分:1)
您必须将上下文对象强制转换为COAApplication。
((COAApplication)mContext).getApplicationContext().setLoggedUser(registedUser, mRememberMe);
修改强>
您将无法访问课程外的活动变量。您可以通过不同的方式实现此目的。您可以按照界面方法。使用方法创建接口,在活动类中实现它将活动的引用传递给asynctask。 onPostExecute(),只需调用接口方法即可。
这样您就可以向活动发送回调,并且您只能在活动中执行这些操作。
答案 1 :(得分:0)
这是因为getApplicationContext
获得了一个ApplicationContext
对象,而您需要一个COAApplication
对象,因此您应该将结果转换为此类型,如下所示:
((COAApplication)mContext).getApplicationContext().setLoggedUser(registedUser, mRememberMe);
通常,我们通常在Application Class中定义一个方法来获取类的单例,如下所示:
public class COAApplication extends Application{
private static COAApplication mSingleton = null;
protected void onCreate(){
mSingleton = this;
}
public static COAApplication getSingleton(){
return mSingleton;
}
然后在你需要这个类的任何地方,只需调用COAApplication.getSingleton()
,你就不需要转换类型,这会使代码难看。