1

このチュートリアルのAndroid プッシュ通知を Google Cloud Messaging (GCM)、PHP、および MySQLを使用してプロジェクトに実装しようとしています。

アプリの起動時にデバイスが自分自身を登録するように変更しました。また、メッセージが到着したときに表示するダイアログボックスを使用するようにしましたが、問題があります。アプリを初めて実行すると、登録しようとしますが、ダイアログコードが原因でクラッシュします。もう一度開くと(すでに登録されています)、うまく機能し、メッセージを受信するとダイアログボックスに表示されます。これが私の修正コードです。元の作品に変更すると、次のようになります。

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(final Context context, Intent intent) {
            final SpannableString newMessage = new SpannableString(intent.getExtras().getString(EXTRA_MESSAGE));
            // Waking up mobile if it is sleeping
            WakeLocker.acquire(getApplicationContext());

            /**
             * Take appropriate action on this message
             * depending upon your app requirement
             * For now i am just displaying it on the screen
             * */

                        final Dialog dialog = new Dialog(context);
                        dialog.setContentView(R.layout.custom);
                        dialog.setTitle("Info");
                        TextView text = (TextView) dialog.findViewById(R.id.text);
                        text.setAutoLinkMask(RESULT_OK);
                        text.setMovementMethod(LinkMovementMethod.getInstance());
                        Linkify.addLinks(newMessage, Linkify.ALL);
                        text.append(newMessage);    
                        //ImageView image = (ImageView) dialog.findViewById(R.id.image);
                        //image.setImageResource(R.drawable.ic_launcher);

                        Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
                        // if button is clicked, close the custom dialog
                        dialogButton.setOnClickListener(new OnClickListener() {
                            public void onClick(View v) {
                                dialog.dismiss();
                            }
                        });      
                        dialog.show();

            // Showing received message
                    //lblMessage.setText(cucu);
            //lblMessage.setVisibility(View.VISIBLE);
            //btnClear.setVisibility(View.VISIBLE);
            //lblMessage.append(newMessage + "\n");         
            //Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show();

            // Releasing wake lock
            WakeLocker.release();
        }
    };

元のコードは次のとおりです。

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
            // Waking up mobile if it is sleeping
            WakeLocker.acquire(getApplicationContext());

            /**
             * Take appropriate action on this message
             * depending upon your app requirement
             * For now i am just displaying it on the screen
             * */

            // Showing received message
            lblMessage.append(newMessage + "\n");           
            Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show();

            // Releasing wake lock
            WakeLocker.release();
        }
    };

これはlogcatが言うことです:

12-07 16:32:55.637: E/AndroidRuntime(27119): FATAL EXCEPTION: main
12-07 16:32:55.637: E/AndroidRuntime(27119): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.androidhive.pushnotifications.DISPLAY_MESSAGE (has extras) } in com.music.aacplay.AACPlayerActivity$1@4052b068
12-07 16:32:55.637: E/AndroidRuntime(27119):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at android.os.Handler.handleCallback(Handler.java:587)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at android.os.Looper.loop(Looper.java:130)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at android.app.ActivityThread.main(ActivityThread.java:3687)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at java.lang.reflect.Method.invokeNative(Native Method)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at java.lang.reflect.Method.invoke(Method.java:507)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at dalvik.system.NativeStart.main(Native Method)
12-07 16:32:55.637: E/AndroidRuntime(27119): Caused by: java.lang.NullPointerException
12-07 16:32:55.637: E/AndroidRuntime(27119):    at android.text.SpannableString.<init>(SpannableString.java:30)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at com.music.aacplay.AACPlayerActivity$1.onReceive(AACPlayerActivity.java:359)
12-07 16:32:55.637: E/AndroidRuntime(27119):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709)
12-07 16:32:55.637: E/AndroidRuntime(27119):    ... 9 more

質問は、最初に実行して登録しようとしたときにアプリがクラッシュする原因となる間違っていることは何ですか?

4

0 に答える 0