Je suis novice en matière de programmation Android et je commence tout juste à apprendre, ce que je fais petit à petit en bricolant, ainsi qu'en utilisant les connaissances que j'ai acquises avec Java.
Je souhaite créer un notification
pour contenir toutes les méthodes de notification à appeler à chaque fois que je souhaite qu'une notification se produise. Pour une raison quelconque, j'ai un problème de exception pendant que le programme crée un NotificationManager
pour créer un canal de notification. Cela ne semble se produire que lorsque l'on crée l'objet notification
une classe distincte.
Classe MainActivity :
package com.example.colombian.textingclasses;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
notifications n = new notifications(this);
}
}
classe de notifications :
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
public class notifications {
private Context context;
public final String CHANNEL_ID = "customChannel";
public notifications(Context c) {
createNotificationChannel();
context = c;
}
//creates a notification channel
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "MyChannel";
String description = "Description";
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
/*******Error happens below*******/
NotificationManager nm = (NotificationManager) context.getSystemService(NotificationManager.class); //error
nm.createNotificationChannel(channel);
}
}
}
Exception :
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.colombian.textingclasses, PID: 16471
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.colombian.textingclasses/com.example.colombian.textingclasses.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.Class)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6940)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.Class)' on a null object reference
at com.example.colombian.textingclasses.notifications.createNotificationChannel(notifications.java:32)
at com.example.colombian.textingclasses.notifications.<init>(notifications.java:19)
at com.example.colombian.textingclasses.MainActivity.onCreate(MainActivity.java:14)
at android.app.Activity.performCreate(Activity.java:7174)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6940)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Ce qui est étrange, c'est que lorsque le createNotificationChannel()
se trouve à l'intérieur de la méthode MainActivity
elle fonctionne parfaitement. Cela semble même fonctionner si je fais de la classe notification
une classe interne de MainActivity
. Je ne comprends pas pourquoi il y a une exception lorsque je le copie dans une classe séparée pour créer un objet.
Gardez à l'esprit que ceci est basé sur l'API 26+ ou Android 8.0.0.
__
P.S. J'espère que ma question est suffisamment précise. C'est la première fois que je pose une question ici, alors n'hésitez pas à me faire savoir s'il y a quelque chose à clarifier. Je vous remercie.