Java Android应用程序在试图通过firebase接收推送通知时崩溃
更新:Java Android应用程序在试图通过firebase接收推送通知时崩溃,java,android,firebase,firebase-cloud-messaging,Java,Android,Firebase,Firebase Cloud Messaging,更新: 显然,通过onMessageReceived方法上的“throws NullPointerException”解决了崩溃,但是通知没有到达应用程序 Android Studio建议MyFirebaseMessagingService.java中的方法.getTitle()和.notify()可以生成NullPointerException,但我不知道为什么 各位好, 我正在尝试通过firebase云消息服务向我的应用程序发送推送通知 有两种情况 如果我定期向所有用户发送通知,则不会发
- 显然,通过onMessageReceived方法上的“throws NullPointerException”解决了崩溃,但是通知没有到达应用程序
- Android Studio建议MyFirebaseMessagingService.java中的方法
和.getTitle()
可以生成NullPointerException,但我不知道为什么.notify()
2019-12-12 22:47:00.367 5727-5881/com.maunexus D/FA: Logging event (FE): notification_receive(_nr), Bundle[{ga_event_origin(_o)=fcm, ga_screen_class(_sc)=MainActivity, ga_screen_id(_si)=375841024272355326, message_device_time(_ndt)=0, message_type(_nmc)=display, message_name(_nmn)=Yeeey!, message_time(_nmt)=1576183623, message_id(_nmid)=4180683689345961897}]
2019-12-12 22:47:00.367 5727-5878/com.maunexus E/AndroidRuntime: FATAL EXCEPTION: Firebase-MyFirebaseMessagingService
Process: com.maunexus, PID: 5727
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.messaging.RemoteMessage$Notification com.google.firebase.messaging.RemoteMessage.getNotification()' on a null object reference
at com.maunexus.MyFirebaseMessagingService.onMessageReceived(MyFirebaseMessagingService.java:21)
at com.google.firebase.messaging.FirebaseMessagingService.zzc(com.google.firebase:firebase-messaging@@20.1.0:78)
at com.google.firebase.messaging.zze.run(com.google.firebase:firebase-messaging@@20.1.0:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at com.google.android.gms.common.util.concurrent.zza.run(Unknown Source:6)
at java.lang.Thread.run(Thread.java:919)
2019-12-12 22:47:00.417 5727-5727/com.maunexus I/FIAM.Headless: Removing display event listener
2019-12-12 22:47:00.434 5727-5878/com.maunexus I/Process: Sending signal. PID: 5727 SIG: 9
MainActivity.java
package com.maunexus;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.CookieManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;
public class MainActivity extends AppCompatActivity {
private WebView webView;
Activity activity;
private static final String TAG = "MainActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity = this;
webView = (WebView) findViewById(R.id.webviewid);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
}
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
webView.getSettings().setSupportMultipleWindows(false);
webView.getSettings().setSupportZoom(false);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://pari365.mg");
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
//To do//
return;
}
// Get the Instance ID token//
String token = task.getResult().getToken();
String msg = getString(R.string.fcm_token, token);
Log.d(TAG, msg);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.super_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_back:
onBackPressed();
break;
case R.id.menu_forward:
onForwardPressed();
break;
case R.id.menu_refresh:
webView.reload();
Toast.makeText(this, "Reloading... Please Wait!", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
private void onForwardPressed() {
if (webView.canGoForward()) {
webView.goForward();
} else {
Toast.makeText(this, "Already there! ;)", Toast.LENGTH_SHORT).show();
}
}
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
}
}
}
BuildGrandle应用程序
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.maunexus"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-analytics:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.firebase:firebase-inappmessaging-display:19.0.2'
implementation 'com.android.support:multidex:1.0.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
apply plugin: 'com.google.gms.google-services'
“onMessageReceived”中存在空引用错误 您正在调用该消息的特定属性,这些属性试图从空值中提取数据:
.setContentTitle(remoteMessage.getNotification().getTitle())
作为remoteMessage变量传入的任何内容都显示为null。你应该从那里开始,看看你在传递什么。你在“onMessageReceived”中有一个空引用错误 您正在调用该消息的特定属性,这些属性试图从空值中提取数据:
.setContentTitle(remoteMessage.getNotification().getTitle())
作为remoteMessage变量传入的任何内容都显示为null。你应该从那里开始,看看你在传递什么。错误消息告诉你
消息
为空。我不清楚FCM为什么这么做。在我看来,这就像FCM中的一个bug。现在,在调用getNotification()
之前,您应该检查消息是否不为null,以防止应用程序崩溃
我强烈建议并清楚地解释如何重现该问题。错误消息告诉您消息
为空。我不清楚FCM为什么这么做。在我看来,这就像FCM中的一个bug。现在,在调用getNotification()
之前,您应该检查消息是否不为null,以防止应用程序崩溃
我强烈建议并清楚地解释如何重现该问题。MyFirebaseMessagingService.java:21
MyFirebaseMessagingService.java的第21行在哪里?@code peedient.setContentTitle(remoteMessage.getNotification().getTitle()),其中发生了空异常。似乎是“getNotification()”调用导致了错误。看起来remoteMessage为空。@Code Peedient.setContentTitle(remoteMessage.getNotification().getTitle())MyFirebaseMessagingService.java:21
MyFirebaseMessagingService.java的第21行在哪里?@Code Peedient.setContentTitle(remoteMessage.getNotification().getTitle()),其中发生了空异常。似乎是“getNotification()”调用导致了错误。看起来remoteMessage为空。@Code Peedient.setContentTitle(remoteMessage.getNotification().getTitle())显然,在onMessageReceived方法上使用“throws NullPointerException”解决了崩溃问题,但通知没有到达应用程序。Android Studio建议使用方法.getTitle()和.notify()在MyFirebaseMessagingService.java中,可能会生成NullPointerException,但我不知道为什么OP不向onMessageReceived传递任何内容。这是FCM框架调用的回调。它看起来像是FCM的一个bug,因为它正在向应用程序发送一条null消息
。显然,通过在onMessageReceived方法上使用“throws NullPointerException”解决了崩溃问题,但通知没有到达应用程序。Android Studio建议使用方法.getTitle()和.notify()在MyFirebaseMessagingService.java中,可能会生成NullPointerException,但我不知道为什么OP不向onMessageReceived传递任何内容。这是FCM框架调用的回调。它看起来像是FCM的一个bug,因为它向应用程序发送了一条空的消息。
.setContentTitle(remoteMessage.getNotification().getTitle())