Уведомление об асинхронной работе не работает должным образом и вещательный приемник - PullRequest
0 голосов
/ 03 ноября 2018

Я всегда получаю эту ошибку, я новичок в приемнике 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, я получаю сообщение о глобальном классе, в котором я храню свои данные. говоря, что это ноль.

Просьба помочь

...