Il ya 3 jours, j'ai demandé à propos de quelque chose comme My Question 3 days Ago. Maintenant, j'ai de nouveaux problèmes. S'il vous plaît voir mon code ci-dessous.Redémarrez AlarmManager après le redémarrage en utilisant BootService
J'ai une méthode startAlarm()
public void startAlarm(final Context context){
myRef.child("users").child(uId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot babyDataSnapshot) {
for (DataSnapshot babySnapshot: babyDataSnapshot.getChildren()) {
final Baby baby = babySnapshot.getValue(Baby.class);
uBabyName = baby.getuBabyName();
myRef.child("users").child(uId).child(uBabyName).child("Vaccines").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot vaccineDataSnapshot) {
for (DataSnapshot vaccineSnapshot: vaccineDataSnapshot.getChildren()){
Vaccine vaccine = vaccineSnapshot.getValue(Vaccine.class);
calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH)+1;
day = calendar.get(Calendar.DAY_OF_MONTH);
today = day + "/" + month + "/" + year;
vaccineDate = vaccine.getVaccineDate();
String [] dateParts = vaccineDate.split("/");
int vDay = Integer.parseInt(dateParts[0]);
int vMonth = Integer.parseInt(dateParts[1]);
int vYear = Integer.parseInt(dateParts[2]);
SimpleDateFormat myFormat = new SimpleDateFormat("dd/MM/yyyy");
try {
Date dVaccine = myFormat.parse(vaccineDate);
Date dToday = myFormat.parse(today);
long diffD = calculateDays(dToday, dVaccine);
if(diffD>=0){
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
notificationIntent.putExtra("Content", "Waktunya Imunisasi "+ vaccine.getVaccineName() + " untuk " + baby.getuBabyName());
notificationIntent.addCategory("android.intent.category.DEFAULT");
android.icu.util.Calendar cal = android.icu.util.Calendar.getInstance();
PendingIntent broadcast = PendingIntent.getBroadcast(context, NotificationID.getID(), notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
cal.set(android.icu.util.Calendar.YEAR, vYear);
cal.set(android.icu.util.Calendar.MONTH, vMonth-1);
cal.set(android.icu.util.Calendar.DAY_OF_MONTH, vDay);
cal.set(android.icu.util.Calendar.HOUR_OF_DAY, 6);
cal.set(android.icu.util.Calendar.MINUTE, 00);
cal.set(android.icu.util.Calendar.SECOND, 00);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), broadcast);
}
else {
//TextView desc = (TextView) findViewById(R.id.desc);
//desc.setText("<0");
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Quand j'appelle cela à une activité normale, il me donne une notification. Mais quand j'appelle cela de BootService
public class BootService extends Service {
@Override
public void onCreate() {
try
{
AddBabyActivity addBabyActivity = new AddBabyActivity();
addBabyActivity.startAlarm(this);
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
Il me donne une erreur lorsque je redémarre mon téléphone
08-14 12:56:19.514 3977-3977/ga.crescere.mom W/System.err: java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at com.google.firebase.database.DatabaseReference.child(Unknown Source)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at ga.crescere.mom.AddBabyActivity.startAlarm(AddBabyActivity.java:160)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at ga.crescere.mom.BootService.onCreate(BootService.java:19)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at android.app.ActivityThread.handleCreateService(ActivityThread.java:3216)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at android.app.ActivityThread.-wrap5(ActivityThread.java)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at android.os.Looper.loop(Looper.java:154)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6186)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at java.lang.reflect.Method.invoke(Native Method)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
08-14 12:56:19.515 3977-3977/ga.crescere.mom W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
08-14 12:56:19.527 3977-4034/ga.crescere.mom D/NetworkSecurityConfig: No Network Security Config specified, using platform default
08-14 12:56:29.603 3977-3997/ga.crescere.mom W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
AddBabyActivity Ligne 160
myRef.child("users").child(uId).addValueEventListener(new ValueEventListener() {
BootService Ligne 19
addBabyActivity.startAlarm(this);
Dernier jour, je fais startAlarm statique sans base de données importation firebase et il me donne une notification Successfull après le redémarrage. Mais maintenant, je dois supprimer le statique car il donnera une erreur à toute la ligne dans startAlarm méthode. Quelqu'un peut-il m'aider avec cette erreur?
Non, je l'ai déclaré à la méthode onCreate: 'onCreate protégé void (Bundle savedInstanceState) { super .onCreate (savedInstanceState); setContentView (R.layout.activity_add_baby); FirebaseUser utilisateur = FirebaseAuth.getInstance(). GetCurrentUser(); uId = user.getUid(); } ' –
@EMFarih essayer à System.out.println (uId) avant de faire appel et vous saurez si elle est nulle.Erreur dit qu'il y a un chemin nul Chaîne dans child() –
génial, vous avez raison ,. J'ai juste besoin de placer la déclaration uId dans startAlarm(); ... merci .. –