从主活动调用时获取GCM注册ID的空指针

时间:2014-05-09 12:14:09

标签: android google-cloud-messaging

我正在制作一个应用程序,其中学生将在他们的设备上获得推送通知。     为此我需要首先登录,当登录成功时我调用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("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&REGISTRATION 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。     帮助将不胜感激。     

1 个答案:

答案 0 :(得分:1)

这是因为Gcm服务器花了一些时间来创建注册ID,你必须调用它一段时间,我的意思是你必须创建获取regId的方法,然后调用它5次1秒间隔和获得RegId中断循环。< / p>