Android无法解析onPostExecute()方法中的任何AsyncTask成员对象方法

时间:2016-03-13 03:19:21

标签: java android

创建了一些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的成员对象相关的所有方法都无法在其中解析。

2 个答案:

答案 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(),你就不需要转换类型,这会使代码难看。