2016-06-07 27 views
0

我正在构建一个应用程序,并且正在使用FCM通知。当用户点击通知时,我想将他发送到主活动上的Fragment1(这是片段的名称)。我这样做intent.putExtra但在主要活动时记录Bundle extras = getIntent()。getExtras()我有空指针异常。为什么我在putExtra中没有任何东西?为什么我的Bundle临时演员不存在?

这里是myFireBaseMessagingService

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Log.d("OnMessage", "Received"); 
    super.onMessageReceived(remoteMessage); 
    Log.d(TAG, "From " + remoteMessage.getFrom()); 
    Log.d(TAG, "Body " + remoteMessage.getNotification().getBody()); 
    sendNotification(remoteMessage); 

} 




private void sendNotification(RemoteMessage remoteMessage) { 
    Intent intent=new Intent(this, MainActivity.class); 
    intent.putExtra("action", "goToFragment1"); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent=PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
    Uri defaultSoundUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder=new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.logo) 
      .setContentText(remoteMessage.getNotification().getBody()) 
      .setContentTitle("Asp") 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 
    NotificationManager notificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0, notificationBuilder.build()); 


} 

这里是MainActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btn1=(Button)findViewById(R.id.dugme1); 
    btn2=(Button)findViewById(R.id.dugme2); 
    btn3=(Button)findViewById(R.id.dugme3); 
    dugme=(Button)findViewById(R.id.subscribe); 
    dugme.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      FirebaseMessaging.getInstance().subscribeToTopic("developeri"); 
      Log.d("Bravo", "Subscribed to developeri!"); 
     } 
    }); 


    FragmentManager fm=getSupportFragmentManager(); 
    FragmentTransaction ft=fm.beginTransaction(); 
    StartFragment startFragment=new StartFragment(); 
    ft.add(R.id.myFragment, startFragment); 
    ft.commit(); 
    btn1.setOnClickListener(btnOnClickListener); 
    btn2.setOnClickListener(btnOnClickListener); 
    btn3.setOnClickListener(btnOnClickListener); 
    Intent intent=getIntent(); 
    Bundle extras=getIntent().getExtras(); 
    Log.d("Bundle", "Bundle is here"); 
    Log.d("Extras", extras.getString("action")); 
    if (extras!=null && extras.containsKey("action") && extras.getString("action").contains("goToFragment1")){ 
     getSupportFragmentManager().beginTransaction().replace(R.id.myFragment, new Fragment1()).commit(); 
     Log.d("MainActivity", "IF IS HERE"); 

    } 

} 
Button.OnClickListener btnOnClickListener= new Button.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Fragment newFragment; 
     if (view==btn1){ 
      newFragment =new Fragment1(); 

     }else if(view==btn2){ 
       newFragment =new Fragment2(); 
     }else if (view==btn3){ 
      newFragment =new Fragment3(); 
     }else{ 
      newFragment=new StartFragment(); 
     } 
     FragmentTransaction transaction=getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.myFragment, newFragment); 
     transaction.addToBackStack(null); 
     transaction.setTransition(FragmentTransaction.TRANSIT_NONE); 
     transaction.commit(); 


    } 
}; 

}

我logcat的

9月6日至7日:22:49.598 23913-23913/com.example.dev3.fragmenti E/AndroidRuntime:致命异常:主 了java.lang.RuntimeException:无法启动活动 ComponentInfo {com.example.dev3.fragmenti/com.example.dev3.fragmenti.MainActivity}: 显示java.lang.NullPointerException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java) 在android.app.ActivityThread.access $ 700(ActivityThread.java) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java) at android.os.Handler.dispatchMessage(Handler.java) at android.os.Looper.loop(Looper.java) at android.app.ActivityThread.main(ActivityThread.java) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect .Method.invoke(Method.java:525) 在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java) at dalvik.system.NativeStart.main(Native Method) 引起:java.lang.NullPointerException at com.example.dev3.fragmenti.MainActivity.onCre吃(MainActivity.java:53) 在android.app.Activity.performCreate(Activity.java) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread。 JAVA) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java) 在android.app.ActivityThread.access $ 700(ActivityThread.java) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java) 在android.os.Handler.dispatchMessage(Handler.java) at android.os.Looper.loop(Looper.java) at android.app.ActivityThread.main(ActivityThread.java) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect。 Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit。JAVA) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java) 在dalvik.system.NativeStart.main(本机方法)

+0

请提供您的错误信息和堆栈跟踪。 –

+0

这是我的错误。 –

+0

你的MainActivity中哪一行是第53行? –

回答

0

在创建活动时启动时才调用。它在收到您的通知时保持“活着”。因此,你应该有你的代码处理多余的:

@Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 

     if (intent.hasExtra("action")) { 
      String action = intent.getExtras().getString("action"); 
      // Do what ever is needed 
      if (action.equalsIgnoreCase("gotToFragment1")) { 
       getSupportFragmentManager().beginTransaction().replace(R.id.myFragment, new Fragment1()).commit(); 
      } 
     } 
    } 

添加onNewIntent()方法您的MainActivity(活动接收新的意图)。 如果你的活动已经开始,这将被调用。

+0

好的,但我要在哪里使用“goToFragment1”?在这个你的方法,我只是使用“行动”? –

+0

再次为空指针... –

+0

intent.putExtra(“action”,“goToFragment1”);迟到了。在意图创建后设置 –

0

尝试移动你的

intent.putExtra("action", "goToFragment1"); 

上述

PendingIntent pendingIntent=PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
+0

不,再次相同...该死的空指针! –

+0

@ Goran_1992在调用'getActivity'时使用唯一的'requestCode' – pskink

+0

我不知道如何使用requestCode。你可以帮帮我吗? –

相关问题