Я всегда получаю эту ошибку, я новичок в приемнике Broadcast и немного опыта с уведомлением, но каждый раз, когда я вызываю Asynctask, который вызывает уведомление на postExecute, я всегда получаю эту ошибку. Я пытался найти решение целый день и не могу найти решение.
Ps: использование уведомлений работает правильно без использования broadcastReceiver, но я хочу использовать его, чтобы даже приложение закрытое приложение постоянно обновляло пользователя.
11-03 16:09:06.482 29073-29073/com.example.jade.messaging E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jade.messaging, PID: 29073
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ContentResolver android.content.Context.getContentResolver()' on a null object reference
at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:102)
at android.app.PendingIntent.getActivity(PendingIntent.java:306)
at android.app.PendingIntent.getActivity(PendingIntent.java:272)
at com.example.jade.messaging.MainActivity.sendOnChannel1(MainActivity.java:77)
at com.example.jade.messaging.MainActivity$getTemp.onPostExecute(MainActivity.java:306)
at com.example.jade.messaging.MainActivity$getTemp.onPostExecute(MainActivity.java:240)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.access$500(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7409)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Вот моя основная деятельность
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler();
createNotificationChannels();
notificationManager = NotificationManagerCompat.from(this);
stopAlarm();
}
private void createNotificationChannels() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel1 = new NotificationChannel(
CHANNEL_1_ID,
"Channel 1",
NotificationManager.IMPORTANCE_HIGH
);
channel1.setDescription("This is Channel 1");
NotificationManager manager = getSystemService(NotificationManager.class);
if (manager != null) {
manager.createNotificationChannel(channel1);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendOnChannel1() {
String title = "Notif";
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
//this is where I get the null pointer and if I remove this I get the error at the .build
pendingIntent1 = PendingIntent.getActivity(this, 1, intent, 0);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_1_ID)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(title)
.setContentText(message)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setContentIntent(pendingIntent1)
.setVibrate(new long[0])
.setAutoCancel(true)
.build();
notificationManager.notify(1, notification);
}
это мой приемник вещания
MainActivity activity = new MainActivity();
@Override
public void onReceive(Context arg0, Intent arg1) {
// For our recurring task, we'll just display a message
activity.getValue();
}
Метод, который я там вызвал, затем запускает AsyncTask
для основного действия, а после выполнения выполняет уведомление.
AsyncTask
код:
private static class getData extends AsyncTask<String, String, Double> {
@Override
protected Double doInBackground(String... strings) {
//get data from database code
}
@Override
protected void onPostExecute(Double x) {
activity.globalClass.setCurrent_Temp(x);
activity.message = String.valueOf(activity.globalClass.getCurrent_Temp());
activity.msg = String.valueOf(x);
activity.sendOnChannel1();
activity.sendSMSMessage();
}
}
Я использую слабую ссылку на asyctask, поэтому есть активность. на каждом коде. Мое приложение падает, только когда я вызываю notif в asynctask, и если я вызываю метод notif для класса broadcastreceiver, я получаю сообщение о глобальном классе, в котором я храню свои данные. говоря, что это ноль.
Просьба помочь