使用简单日期格式解析日期时出现空指针异常
null Pointer Exception when parsing date with Simple Date format
我在将我的字符串转换为日期时遇到问题,它给了我一个空指针异常,我已经尝试了所有方法。
这就是我从 calendarView 将字符串输入数据库的方式
mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView calendarView, int i, int i1, int i2) {
string = (i1 + 1) + "/" +i2 + "/" + i;
}
});
String key = mDatabase.push().getKey();
HashMap<String, String> dataMap = new HashMap<>();
dataMap.put("Date", date);
dataMap.put("Key", key);
mDatabase.child(key).setValue(dataMap);
然后当我从我的数据库中检索它时,我将它格式化为这样
databaseReference = FirebaseDatabase.getInstance().getReference().child("Groups").child("JMHyOvgCDvdKEZuReJvdGcExEnX2").child("HomeFragment").child("FreezerItems");
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
HashMap<String, String> value = (HashMap<String,String>) dataSnapshot.getValue();
if (value != null){
String name = value.get("Name");
String date = value.get("Date");
try {
dateFormat = new Date();
dateFormat = new SimpleDateFormat("M/dd/yyyy", Locale.US).parse(date);
} catch (ParseException e) {
Log.wtf("FailedtoChangeDate", "Fail");
}
我的问题是当我尝试将字符串转换为 M/dd/yyyy 格式时,即使字符串中的日期格式类似于“5/30/2018”
调试时的截图
更新我的回答:-
您输入的日期05/20/2018
String input_date = "05/20/2018";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
try {
Date date = format.parse(input_date );
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
你的截图很有用。它显示 value
returns null
名称和日期。所以你试图从这张地图中取出的值不在那里。这就是为什么 date
是 null
而你得到你的 NullPointerException
.
为什么地图中没有日期(也没有名称)在我们可以在问题中看到的代码之外,所以我无法判断。
我在将我的字符串转换为日期时遇到问题,它给了我一个空指针异常,我已经尝试了所有方法。
这就是我从 calendarView 将字符串输入数据库的方式
mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView calendarView, int i, int i1, int i2) {
string = (i1 + 1) + "/" +i2 + "/" + i;
}
});
String key = mDatabase.push().getKey();
HashMap<String, String> dataMap = new HashMap<>();
dataMap.put("Date", date);
dataMap.put("Key", key);
mDatabase.child(key).setValue(dataMap);
然后当我从我的数据库中检索它时,我将它格式化为这样
databaseReference = FirebaseDatabase.getInstance().getReference().child("Groups").child("JMHyOvgCDvdKEZuReJvdGcExEnX2").child("HomeFragment").child("FreezerItems");
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
HashMap<String, String> value = (HashMap<String,String>) dataSnapshot.getValue();
if (value != null){
String name = value.get("Name");
String date = value.get("Date");
try {
dateFormat = new Date();
dateFormat = new SimpleDateFormat("M/dd/yyyy", Locale.US).parse(date);
} catch (ParseException e) {
Log.wtf("FailedtoChangeDate", "Fail");
}
我的问题是当我尝试将字符串转换为 M/dd/yyyy 格式时,即使字符串中的日期格式类似于“5/30/2018”
调试时的截图
更新我的回答:-
您输入的日期05/20/2018
String input_date = "05/20/2018";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
try {
Date date = format.parse(input_date );
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
你的截图很有用。它显示 value
returns null
名称和日期。所以你试图从这张地图中取出的值不在那里。这就是为什么 date
是 null
而你得到你的 NullPointerException
.
为什么地图中没有日期(也没有名称)在我们可以在问题中看到的代码之外,所以我无法判断。