如何检查 jsonArray 是否有值不是 ?显示我 原因:java.lang.NumberFormatExceptio



我正在尝试从日历中删除事件,因此我正在从数据库中获取事件 ID 并将它们发送到本地日历以删除它们,

当我尝试执行它们时,它向我显示错误,例如

日志猫

03-22 08:29:41.474 27018-27018/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
       Process: com.example.myapplication, PID: 27018
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.Schedule_Delete}: java.lang.NumberFormatException: For input string: " "
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
           at android.app.ActivityThread.-wrap14(ActivityThread.java)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:154)
           at android.app.ActivityThread.main(ActivityThread.java:6776)
           at java.lang.reflect.Method.invoke(Native Method)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
        Caused by: java.lang.NumberFormatException: For input string: " "
           at java.lang.Long.parseLong(Long.java:432)
           at java.lang.Long.parseLong(Long.java:485)
           at com.example.myapplication.Schedule_Delete.Event_delete(Schedule_Delete.java:99)
           at com.example.myapplication.Schedule_Delete.writeCalendarEvent(Schedule_Delete.java:76)
           at com.example.myapplication.Schedule_Delete.onCreate(Schedule_Delete.java:36)
           at android.app.Activity.performCreate(Activity.java:6956)
           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) 
           at android.app.ActivityThread.-wrap14(ActivityThread.java) 
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) 
           at android.os.Handler.dispatchMessage(Handler.java:102) 
           at android.os.Looper.loop(Looper.java:154) 
           at android.app.ActivityThread.main(ActivityThread.java:6776) 
           at java.lang.reflect.Method.invoke(Native Method) 
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) 
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386) 

安卓代码

private void writeCalendarEvent ()
{
    String jsonString = getIntent().getStringExtra("rootJson");
    String data = "";
    try {
        JSONObject jsonRootObject = new JSONObject(jsonString);
        JSONArray jsonArray = jsonRootObject.getJSONArray("NEW_SCHEDULE");
        Event_id = new String[jsonArray.length()];
        for (L = 0; L < jsonArray.length(); L++) {
            JSONObject jsonObject = jsonArray.getJSONObject(L);
             Event_id[L] = jsonObject.getString("Event_id");
            Event_delete(Event_id[L]);
        }
    } catch (JSONException e)
    {
        e.printStackTrace();
    }
}
private void Event_delete(String s)
{
    String id;
    if(s.equals(""))
    {
        Toast.makeText(context, "id is empty"+s, Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(context, "id"+s, Toast.LENGTH_LONG).show();
        id=s;
        long eventID = Long.parseLong(id);
        ContentResolver cr = getContentResolver();
        ContentValues values = new ContentValues();
        Uri deleteUri = null;
        deleteUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID);
        int rows = getContentResolver().delete(deleteUri, null, null);
        Log.i("identifier", "Rows deleted: " + rows);
    }
}

这是我的代码,我从数据库中获取事件 ID 并使用它们删除日历中的事件

在数据库中我没有"Event_id[L]"的值,所以我尝试将"私有无效Event_delete(字符串 s("放入并尝试执行该函数,但问题是它没有执行执行 if 部分执行 else 部分并向我显示此错误

 Caused by: java.lang.NumberFormatException: For input string: " "
       at java.lang.Long.parseLong(Long.java:432)
       at java.lang.Long.parseLong(Long.java:485)
       at com.example.myapplication.Schedule_Delete.Event_delete(Schedule_Delete.java:99)
       at com.example.myapplication.Schedule_Delete.writeCalendarEvent(Schedule_Delete.java:76)
       at com.example.myapplication.Schedule_Delete.onCreate(Schedule_Delete.java:36)

谁能帮我修复这个错误!

所以,parseLong 得到 null。我想这就是为什么它不能解析为Long的原因。也许问题是你应该添加if(s == null || s.trim((.equals("((以防止空引用。

使用trim方法,它将删除多余的空格表单字符串。

id = id.trim();

并添加安全try catch

    try {
        eventID = Long.parseLong(id);
    } catch (ParseException e) {
        Log.e("Error", e.getMessage());
        e.printStackTrace();
    }

相关内容

最新更新