ASyncTask中丢失的变量值

时间:2014-04-28 20:48:02

标签: android variables android-asynctask

我正在尝试检索GCM注册ID。 为此,我正在使用ASyncTask。但是,变量正在接收注册ID(我正在记录它,我可以在LogCat上看到它),但是当我需要将此变量放在另一个函数中时,它显示空值。

以下是代码:

private void registrarRegId() {
    regId = GCMRegistrar.getRegistrationId(getApplicationContext());

    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            if (regId.equals("")) {
                GoogleCloudMessaging gcm = GoogleCloudMessaging
                        .getInstance(getApplicationContext());
                try {
                    regId = gcm.register(SENDER_ID);
                    Log.d("REGID", regId);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


            }
            return null;
        }

    }.execute(null, null, null);

}

1 个答案:

答案 0 :(得分:1)

听起来你调用registrarRegId()函数为regId赋值(我假设是全局的)然后在函数调用后立即尝试使用这个变量(?)如果是这样的话,问题可能是您在AsyncTask创建的后台线程运行完成之前访问变量。尝试使用onPostExecute()方法确保您无法访问doInBackground中设置的任何变量,直到您可以确定后台线程已完成为止。希望这会有所帮助。