0

我想找到未包含在已加入数组中的“已加入数组中的元素”。我找不到问题所在。请帮我。以下是我的代码。LogCat 说“由:java.lang.NullPointerException 引起”。

for (int x = 0; x < wjoined.length; x++)
{
    int count1 = 0;
    for (int y = 0; y < cjoined.length; y++)
    {
        if (wjoined[x].equals(cjoined[y]) )
        {
            count1++;
        }
    }
    if (count1 == 0){
        String sql = "INSERT INTO ErrorCausingFactor (errorcausingelement)"+"VALUE('"+wjoined[x] +"')";
        db.execSQL(sql);
    }
}

这是我的日志猫。

08-30 13:34:02.618: W/dalvikvm(1150): threadid=1: 线程退出未捕获异常 (group=0x40014760) 08-30 13:34:02.628: E/AndroidRuntime(1150): 致命异常: main 08-30 13:34:02.628: E/AndroidRuntime(1150): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.demo.testdemo/com.demo.testdemo.NextActivity}: java.lang.NullPointerException 08- 30 13:34:02.628: E/AndroidRuntime(1150): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 android.app。 ActivityThread.handleLaunchActivity(ActivityThread.java:1764) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 android.app.ActivityThread.access$1500(ActivityThread.java:122) 08-30 13:34:02.628 : E/AndroidRuntime(1150): 在 android.app.ActivityThread$H。handleMessage(ActivityThread.java:1002) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 android.os.Handler.dispatchMessage(Handler.java:99) 08-30 13:34:02.628: E/ AndroidRuntime(1150): 在 android.os.Looper.loop(Looper.java:132) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 android.app.ActivityThread.main(ActivityThread.java:4025 ) 08-30 13:34:02.628: E/AndroidRuntime(1150): at java.lang.reflect.Method.invokeNative(Native Method) 08-30 13:34:02.628: E/AndroidRuntime(1150): at java. lang.reflect.Method.invoke(Method.java:491) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841 ) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 08-30 13:34:02.628: E/AndroidRuntime(1150 ):在 dalvik.system.NativeStart.main(Native Method) 08-30 13:34:02.628: E/AndroidRuntime(1150): 由: java.lang.NullPointerException 08-30 13:34:02.628: E/AndroidRuntime(1150) ): 在 com.demo.testdemo.NextActivity.onCreate(NextActivity.java:157) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712) 08-30 13:34:02.628: E/AndroidRuntime(1150): ...还有 11 个E/AndroidRuntime(1150): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java :1712) 08-30 13:34:02.628: E/AndroidRuntime(1150): ... 11 更多E/AndroidRuntime(1150): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 08-30 13:34:02.628: E/AndroidRuntime(1150): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java :1712) 08-30 13:34:02.628: E/AndroidRuntime(1150): ... 11 更多

4

3 回答 3

2

每当您在日志中看到异常时,它都会说明发生错误的确切行。你应该调查一下。不知道我怀疑的线路wjoinedcjoined或者dbnull

编辑:查看您的日志,错误位于 NextActivity.java 的第 157 行。看看那是什么,你可能知道出了什么问题

于 2013-08-30T14:14:30.683 回答
1

您的定位应该为您提供更多详细信息,而不仅仅是异常,还将有一个堆栈跟踪,应该为您提供 NPE 发生在哪一行的指示。

在您的代码中,我可以看到抛出 NPE 的 3 个可能位置:

  1. 如果 wJoined 为 null,那么您将在第一个 for 语句的行号处抛出 NPE
  2. 如果 cJoined 为 null,那么您将在第二个 for 循环的行号处抛出 NPE
  3. 如果您的数据库对象 db 为空,那么您将获得一个执行插入语句的 NPE。

只需检查您的堆栈跟踪:

引起:java.lang.NullPointerException 08-30 13:34:02.628: E/AndroidRuntime(1150): at com.demo.testdemo.NextActivity.onCreate(NextActivity.java:157)

编辑:4. is wJoined[x] is null 这也会引发 NPE,如 Roddy the freeze peas 所示:-)

所以它在第 157 行发生错误

于 2013-08-30T14:17:50.503 回答
0

其中一些值为null。试试这个:

if (wjoined != null)
{
    for (int x = 0; x < wjoined.length; x++)
    {
        int count1 = 0;
        if (cjoined != null && wjoined[x] != null)
        {
            for (int y = 0; y < cjoined.length; y++)
            {
                if (cjoined[y] != null)
                {
                    if (wjoined[x].equals(cjoined[y]) )
                    {
                        count1++;
                    }
                } else {
                    System.out.println("cjoined[y]" is null at: " + y);
                }
            }
            if (count1 == 0){
                String sql = "INSERT INTO ErrorCausingFactor (errorcausingelement)"+"VALUE('"+wjoined[x] +"')";
                if (db != null)
                    db.execSQL(sql);
                else
                    System.out.println("db is null!");
            }
        } else {
            System.out.println("cjoined or wjoined[x] at x: " + x + " is null!");
        }
    }
} else {
    System.out.println("wjoined is null!");
}
于 2013-08-30T14:19:47.383 回答