[英]Android app keeps crashing after displayNotification() added
所以问题出现了 - 当我尝试打开它时,我的 react-native android 应用程序不断崩溃。 这是在添加 CreateNotificationChannel() 和 SendNotification() 函数后开始的。 想就我的问题获得一些帮助或提示。 这是我的代码。 正如我发现的那样,意图有问题。
package com.notifikacijas;
import android.util.Log;
import android.widget.Toast;
import android.content.Context;
import android.content.Intent;
import android.app.NotificationManager;
import android.app.NotificationChannel;
import android.app.Notification;
import android.app.PendingIntent;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import android.os.Build;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.app.NotificationCompat.Builder;
import com.facebook.react.bridge.ReactApplicationContext;
import android.net.Uri;
public class NotificationService extends ReactContextBaseJavaModule {
private ReactApplicationContext reactContext;
public NotificationService(ReactApplicationContext reactContext) {
super(reactContext);
Log.i("NotificationService", "NotificationService Constructor");
this.reactContext = reactContext;
String CHANNEL_ID = "Kanaals";
NotificationCompat.Builder builders = new NotificationCompat.Builder(this.reactContext, CHANNEL_ID);
builders.setContentTitle("Virsraksts");
builders.setContentText("Teksts");
// createNotificationChannel();
createNotificationChannel();
displayNotification();
}
private void displayNotification() {
Intent intent = this.reactContext.getPackageManager().getLaunchIntentForPackage("dtg");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Uri uri = intent.getData();
Log.i("NotificationService", "URI "+uri.toString());
PendingIntent pendingIntent = PendingIntent.getActivity(this.reactContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
String CHANNEL_ID = "notificationsChannel";
NotificationCompat.Builder builder = new NotificationCompat.Builder(this.reactContext, CHANNEL_ID);
// builder.setSmallIcon(17301575);
builder.setContentTitle("Objektā atrodas darbinieki");
builder.setContentText("Vai vēlaties izreģistrēt darbiniekus no objekta?");
builder.setPriority(NotificationCompat.PRIORITY_DEFAULT);
builder.setContentIntent(pendingIntent);
// builder.setAutoCancel(false);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this.reactContext);
notificationManager.notify(123, builder.build());
}
private void createNotificationChannel() {
String CHANNEL_ID = "notificationsChannel";
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = new StringBuffer("charsequence");
String description = "normals description";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
NotificationManager notificationManager = this.reactContext.getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
@Override
public String getName() {
return "NotificationService";
}
}
反应原生:0.61.5
编辑::错误日志(logcat)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: FATAL EXCEPTION: main
03-13 10:16:45.420 26359 26359 E AndroidRuntime: Process: com.notifikacijas, PID: 26359
03-13 10:16:45.420 26359 26359 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.notifikacijas/com.notifikacijas.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager com.facebook.react.bridge.ReactApplicationContext.getPackageManager()' on a null object reference
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3107 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.os.Looper.loop(Looper.java:214 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7032 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager com.facebook.react.bridge.ReactApplicationContext.getPackageManager()' on a null object reference
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.notifikacijas.NotificationService.displayNotification(NotificationService.java:34 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.notifikacijas.NotificationService.<init>(NotificationService.java:30 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.notifikacijas.MainApplication$1.getPackages(MainApplication.java:29 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.facebook.react.ReactNativeHost.createReactInstanceManager(ReactNativeHost.java:76 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.facebook.react.ReactNativeHost.getReactInstanceManager(ReactNativeHost.java:38 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.facebook.react.ReactDelegate.loadApp(ReactDelegate.java:103 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.facebook.react.ReactActivityDelegate.loadApp(ReactActivityDelegate.java:88 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.facebook.react.ReactActivityDelegate.onCreate(ReactActivityDelegate.java:83 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:44 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:7327 undefined)
03-13 10:16:45.420 26359 26359 E AndroidRuntime: at andr
主应用程序
package com.notifikacijas;
import android.app.Application;
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
// import NotificationService.java;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
new NotificationService(null);
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
initializeFlipper(this); // Remove this line if you don't want Flipper enabled
}
/**
* Loads Flipper in React Native templates.
*
* @param context
*/
private static void initializeFlipper(Context context) {
if (BuildConfig.DEBUG) {
try {
/*
We use reflection here to pick up the class that initializes Flipper,
since Flipper library is not available in release mode
*/
Class<?> aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper");
aClass.getMethod("initializeFlipper", Context.class).invoke(null, context);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
我认为reactContext
具有 null 值,这就是它无法获得包管理器的原因。 尝试检查并在 reactContext 中分配适当的对象。
希望这会帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.