【问题标题】:nullpointerexception in a for and if statementfor 和 if 语句中的空指针异常
【发布时间】:2013-08-30 14:03:54
【问题描述】:

我想查找未包含在已加入数组中的“已加入数组中的元素”。 我找不到问题所在。请帮我。以下是我的代码。 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: 线程退出 未捕获的异常(组=0x40014760)08-30 13:34:02.628: E/AndroidRuntime(1150):致命异常:主要 08-30 13:34:02.628: E/AndroidRuntime(1150): java.lang.RuntimeException: 无法启动 活动 组件信息{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):在 java.lang.reflect.Method.invokeNative(Native Method) 08-30 13:34:02.628:E/AndroidRuntime(1150):在 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(本机方法)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 更多

【问题讨论】:

  • 你从哪里得到异常?您可以在堆栈跟踪中找到它。
  • 错误出现在哪一行?
  • 您是否将 db 设置为某事物的实例?
  • cjoined 和 wjoined 长度不同。
  • @user2733182 这应该没什么大不了的。空指针异常发生在哪一行? null 是什么?

标签: java android


【解决方案1】:

每当您在日志中看到异常时,它都会指出发生错误的确切行。你应该调查一下。不知道我怀疑wjoined、cjoined 或db 的线路是null

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

【讨论】:

  • 或者wjoined[x] 也可以为空。
【解决方案2】:

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

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

  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 行

【讨论】:

    【解决方案3】:

    其中一些值为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!");
    }
    

    【讨论】:

    • 如果wjoined[x] 为空?
    • @RoddyoftheFrozenPeas 进行了相应的编辑。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    相关资源
    最近更新 更多