Java Localdate DateTimeParseException的字符串

Java Localdate DateTimeParseException的字符串,java,android,Java,Android,我正在从SQLite数据库加载一个字符串,然后尝试将其转换为LocalDate,以便将其添加为对象参数,然后比较列表中对象的日期 但该应用程序崩溃并出现DateTimeParseException 这就是崩溃的方法,它在我创建LocalDate的那一行崩溃 我在这个网站和其他网站上发现并阅读了许多类似的帖子,但遗憾的是,我无法准确地找出问题所在 private void fillEventsArray(){ Cursor data = mDatabaseHelper.getData();

我正在从SQLite数据库加载一个字符串,然后尝试将其转换为LocalDate,以便将其添加为对象参数,然后比较列表中对象的日期

但该应用程序崩溃并出现DateTimeParseException

这就是崩溃的方法,它在我创建LocalDate的那一行崩溃

我在这个网站和其他网站上发现并阅读了许多类似的帖子,但遗憾的是,我无法准确地找出问题所在

private void fillEventsArray(){
    Cursor data = mDatabaseHelper.getData();
    while(data.moveToNext()){
        String name = data.getString(1);
        String description = data.getString(2);
        String time = data.getString(3);
        String date = data.getString(4);

        LocalDate localDate= LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy/MM/dd"));

        LocalTime localTime=LocalTime.parse(time, DateTimeFormatter.ofPattern("HH:mm"));

        Event event = new Event(name, description, localTime, localDate);

        events.add(event);
    }
我在第4列中以相同的“yyyy/mm/dd”格式保存数据,如2018/11/20

之前我也尝试过像这样将字符串转换为LodaDate/LocalTime,但它有相同的问题:

                String year=date.substring(0,4);
                String month=date.substring(5,7);
                String day=date.substring(8,10);
                LocalDate localDate=LocalDate.of(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
                String hour=time.substring(0,3);
                String minute=time.substring(4,5);
                LocalTime localTime=LocalTime.of(Integer.parseInt(hour),Integer.parseInt(minute));
如果数据库为空,是否会导致错误

如果需要更多信息,请告诉我,我会提供

日志副本:

2018-11-12 15:48:57.836 12038-12038/com.example.dflavio.calendar E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.dflavio.calendar, PID: 12038
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.dflavio.calendar/com.example.dflavio.calendar.MainActivity}: java.time.format.DateTimeParseException: Text 'android.support.v7.widget.AppCompatEditText{ceb966d VFED..CL. .F...' could not be parsed at index 0
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
 Caused by: java.time.format.DateTimeParseException: Text 'android.support.v7.widget.AppCompatEditText{ceb966d VFED..CL. .F...' could not be parsed at index 0
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1948)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDate.parse(LocalDate.java:394)
    at com.example.dflavio.calendar.MainActivity.fillEventsArray(MainActivity.java:104)
    at com.example.dflavio.calendar.MainActivity.onCreate(MainActivity.java:45)
    at android.app.Activity.performCreate(Activity.java:6975)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6541) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
正如有人指出的那样,我可能在如何从编辑文本中获取字符串方面犯了错误。目前代码是这样的:

createBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                EditText nameEditText = (EditText) findViewById(R.id.nameEditText);
                EditText descriptionEditText = (EditText) findViewById(R.id.descriptionEditText);
                EditText timeEditText = (EditText) findViewById(R.id.timeEditText);
                EditText dateEditText = (EditText) findViewById(R.id.dateEditText);

            String name = nameEditText.getText().toString();
            String description = descriptionEditText.getText().toString();
            String time = timeEditText.getText().toString();
            String date = dateEditText.getText().toString();
            if (name.length() != 0){
                if (description.length() != 0){
                    if (time.length() != 0){
                        if (date.length() != 0){
                            AddData(name, description, time, date);
                            nameEditText.setText("");
                            descriptionEditText.setText("");
                            timeEditText.setText("");
                            dateEditText.setText("");
                        }
                    }
                }
            }else{
                toastMessage("Fill in all fields.");
            }

提前感谢您的帮助。

您的数据库似乎包含垃圾;您试图将诸如“android.support.v7.widget.AppCompatiEditText{ceb966d VFED..CL..F..”之类的字符串解析为日期。

您通过调用
nameEditText.toString()
从编辑文本中错误地检索文本,这将尝试将EditText对象转换为字符串,您可以从解析错误中看到


您应该调用
nameEditText.getText().toString()
,它将从对象中获取作为字符串的输入文本。

我现在猜,但在这种情况下,当您从EditText将此日期值保存到db时,是否执行了以下操作:

edittext.toString()
而不是

edittext.getText().toString()

如果是这种情况,则进行更改,因为读取编辑文本的代码中出现错误,而不是您保存的编辑文本的文本


timeEditText.toString();
替换为
timeEditText.getText().toString());

数据库中存储的日期和时间是什么格式的?您有一些示例值吗?您能显示确切的异常吗?它应该包含一些指示错误的信息。@Eamonsculion不完全确定您的意思。在使用此方法之前,我一直只使用字符串。我基本上是在名为将数据保存到SQLite数据库[初学者Android Studio示例]“@Henry用logcat副本更新了帖子。你能发布与设置EditText相关的代码吗?用你的评论中的相关信息更新了我的帖子。我已经对代码进行了更改(也在我的帖子中更新了它),但该应用程序仍会因相同的错误消息而崩溃。我已经对代码进行了更改(在我的帖子中也对其进行了更新),但该应用程序仍会因相同的错误消息而崩溃。当您试图将类似“2018-11-12”的内容变为长格式时,“/”或“-”是否会导致问题?请通过SimpleDateFormat(“yyyy/MM/dd”)解析日期。解析(“2018/11/12”);然后获取日期对象的unix时间(long)。我已经在代码中进行了更改(在我的帖子中也对其进行了更新),但应用程序仍会崩溃,并显示相同的错误消息。@D_Flavio您已对代码进行了更改,但数据库仍包含无效值。请从模拟器/设备中卸载应用程序,以便删除数据库或删除表中的所有行,再次运行应用程序,重新填充表,然后重试。是否进入“查看”->“工具窗口“->”设备文件资源管理器”->从数据文件夹中删除数据库是否有效?是的,确实有效,但卸载应用程序更容易。我实际上不知道从模拟器中卸载应用程序是如何工作的。我已经完成了数据库删除操作,并且工作正常,但我了解了更多如何从模拟器中卸载应用程序?我已经对代码进行了更改(在我的帖子中也有更新),但应用程序仍会崩溃,并显示相同的错误消息。如果您可以在
fillEventsArray
方法中添加断点并进行调试,以查看当应用程序尝试解析另一个要尝试的内容时
数据的值,您可以通过添加
db.execSQL确保在运行应用程序时重置数据库,这将非常有用(“DROP TABLE IF EXISTS”+TABLE_NAME);
到您的
onCreate
方法中(在创建表之前将其作为第一行添加);