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