我正在制作一个应用程序,其中学生将在他们的设备上获得推送通知。 为此我需要首先登录,当登录成功时我调用gcm的寄存器方法...但是当我这样做时,我在我的寄存器方法上得到一个空指针... 但是当我在主要活动的Oncreate上调用register方法时,它给了我注册ID。
请有人建议我如何从主要活动中调用注册方法 以下是我的代码。
注册的异步类::
void registerInBackground() {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID);
System.out
.println("++++++++++++++++++++++++++++++THIS IS MY REG ID FROM ASYNC+++++++++++++++++++++++++"
+ regid);
msg = "Device registered, registration ID=" + regid;
if (regid == null) {
System.out
.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&®ISTRATION ID IS NULL&&&&&&&&&&&&&&&&&&&&&&&&&&&");
}
sendRegistrationIdToBackend(regid);
storeRegistrationId(context, regid);
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
// if (msg == "SERVICE_NOT_FOUND") {
//
// }
// If there is an error, don't just keep trying to register.
// Require the user to click a button again, or perform
// exponential back-off.
}
// will give on screen
return msg;
}
@Override
protected void onPostExecute(String msg) {
System.out
.println("**********THIS IS POST FROM ASYNC***************************"
+ msg);
mDisplay.append(msg + "\n");
// if (msg == null) {
// registerInBackground();
// }
// mDisplay.append(msg + "\n");
}
}.execute(null, null, null);
}
我称之为此方法的主要类::
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager()
.findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
MainActivityPushNotification mainHttp = new MainActivityPushNotification();
mainHttp.registerInBackground();
}
我运行此代码的那一刻,我在regid = gcm.register(SENDER_ID);
上得到一个空指针
当我运行registartion类作为我的启动类时,我得到我的注册ID。
帮助将不胜感激。
答案 0 :(得分:1)
这是因为Gcm服务器花了一些时间来创建注册ID,你必须调用它一段时间,我的意思是你必须创建获取regId的方法,然后调用它5次1秒间隔和获得RegId中断循环。< / p>