Vor 3 Tagen habe ich über so etwas wie My Question 3 days Ago gefragt. Jetzt habe ich ein neues Problem. Bitte beachten Sie meinen Code unten.Neustart AlarmManager nach dem Neustart mit BootService
Ich habe eine startAlarm() -Methode
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) {
}
});
}
Wenn ich dies auf normale Tätigkeit nennen, ist es mir eine Mitteilung geben. Aber wenn ich das nennen von 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;
}
Es gibt mir einen Fehler, wenn ich mein Handy neu starten
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 Linie 160
myRef.child("users").child(uId).addValueEventListener(new ValueEventListener() {
BootService Linie 19
addBabyActivity.startAlarm(this);
Letzter Tag, mache ich startAlarm als statisch ohne Datenbank Firebase importieren und es mir eine erfolgreiche Anmeldung nach dem Neustart geben. Aber jetzt muss ich die statische entfernen, weil es eine viele Fehler an allen Linie in startAlarm Methode geben wird. Kann mir jemand mit diesem Fehler helfen?
Nein, ich habe es bei onCreate Methode deklariert: 'protected void onCreate (Bundle savedInstanceState) { Super .onCreate (savedInstanceState); setContentView (R.layout.activity_add_baby); FirebaseUser user = FirebaseAuth.getInstance(). GetCurrentUser(); uId = Benutzer.getUid(); } ' –
@EMFarih versuchen, System.out.println (UId) vor dem Aufruf und Sie werden wissen, ob es null ist.Error sagt, es gibt null Pfad String in Kind() –
genial, Sie haben Recht ,. Ich muss nur die UID-Deklaration in startAlarm(); ... danke .. –