检索时间(字符串)从firebase设置警报的问题

时间:2019-02-26 12:37:22

标签: android firebase

我正在尝试一个警报应用程序,该应用程序从数据库(Firestore)中检索时间值,并将其存储为String,但是它在我的onTimeSet方法中抛出NullPointerException,我不知道该怎么办。

这是我的方法(dbAlarmManager)。

private FirebaseFirestore db;
private dbReminder tt;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.alarmmanager);

    db = FirebaseFirestore.getInstance();
    db.collection("Reminder").get()
            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                @Override
                public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                    if (!queryDocumentSnapshots.isEmpty()) {
                        List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();

                        for (DocumentSnapshot d : list) {
                            dbReminder p = d.toObject(dbReminder.class);
                            p.setId(d.getId());
                            remtasklist.add(p);
                            onTimeSet();   }
                        adapter.notifyDataSetChanged();
                    }
                }
            });
}

private void onTimeSet(){

    String strtime = tt.getTime();
    String[] parts = strtime.split(":");
    String part1 = parts[0];
    String part2 = parts[1];

    int hr = Integer.parseInt(part1);
    int min = Integer.parseInt(part2);

    final int _id = (int)System.currentTimeMillis();

    Intent alarmIntent = new Intent(dbAlarmManager.this, mainPlan.AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(dbAlarmManager.this, _id, alarmIntent, 0);

    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, hr);
    calendar.set(Calendar.MINUTE, min);
    manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

    Log.i(TAG, "Time to alarm is " + part1 + ":" + part2);

}

dbReminder。

import java.io.Serializable;

@IgnoreExtraProperties
public class dbReminder implements Serializable {

@Exclude
private String id;

private String time;

public dbReminder(String title, String desc, String inLocation, String objPerson, String time) {
    this.time = time;
}
public dbReminder() {
    //empty constructor needed

}
public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getTime() {
    return time;
}

这是我的logcat。

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.asus.robot.onzenbo.dbReminder.getTime()' on a null object reference
    at com.asus.robot.onzenbo.dbAlarmManager.onTimeSet(dbAlarmManager.java:62)
    at com.asus.robot.onzenbo.dbAlarmManager.access$100(dbAlarmManager.java:21)
    at com.asus.robot.onzenbo.dbAlarmManager$1.onSuccess(dbAlarmManager.java:49)
    at com.asus.robot.onzenbo.dbAlarmManager$1.onSuccess(dbAlarmManager.java:39)

提前谢谢!你们可以问,我不知道还有什么。

1 个答案:

答案 0 :(得分:0)

您必须先初始化dbReminder,例如:

String strtime = tt.getTime();