在执行if语句时出现Java.lang.NullPointerException

时间:2014-09-09 08:52:48

标签: java android

我正在尝试对HashMap使用if语句,但是当我尝试在设备上运行它时会崩溃。

这是我的代码

    ImageView promoIcon = (ImageView) findViewById(R.id.icon_promo);

    DatabaseHandler db = new DatabaseHandler(this);

    List <AllItem> allItems = new ArrayList<AllItem>();

    allItems = db.getAllAccommodations();

    for(AllItem cn : allItems) {    

        String promotion = cn.getPromotion();
        if (promotion.equals("1"))
        {
            promoIcon.setVisibility(View.VISIBLE);
        }

        HashMap<String, String> all_Items = new HashMap<String, String>();

        all_Items.put(TAG_PROMOTION,promotion);

        accommodationlist.add(all_Items);


    }

这是我的logcat

09-09 15:13:37.364: E/AndroidRuntime(18292): FATAL EXCEPTION: main
09-09 15:13:37.364: E/AndroidRuntime(18292): Process: com.indomultimedia.hellobali, PID: 18292
09-09 15:13:37.364: E/AndroidRuntime(18292): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.indomultimedia.hellobali/com.indomultimedia.hellobali.Accommodation}: java.lang.NullPointerException
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.app.ActivityThread.access$800(ActivityThread.java:163)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.os.Handler.dispatchMessage(Handler.java:102)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.os.Looper.loop(Looper.java:157)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.app.ActivityThread.main(ActivityThread.java:5335)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at java.lang.reflect.Method.invokeNative(Native Method)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at java.lang.reflect.Method.invoke(Method.java:515)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at dalvik.system.NativeStart.main(Native Method)
09-09 15:13:37.364: E/AndroidRuntime(18292): Caused by: java.lang.NullPointerException
09-09 15:13:37.364: E/AndroidRuntime(18292):    at com.indomultimedia.hellobali.Accommodation.onCreate(Accommodation.java:296)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.app.Activity.performCreate(Activity.java:5389)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
09-09 15:13:37.364: E/AndroidRuntime(18292):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)
09-09 15:13:37.364: E/AndroidRuntime(18292):    ... 11 more

我真的不知道为什么会有错误。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

根据您对该问题的评论,以下行返回null

 ImageView promoIcon = (ImageView) findViewById(R.id.icon_promo);

这意味着findViewById找不到您要查找的视图,因此尝试访问此行中的对象

 promoIcon.setVisibility(View.VISIBLE);

失败,因为promoIcon == null并且您无法调用null上的任何方法。这正是异常消息所说的:您尝试使用的一个对象变量未初始化。你的工作是通过调试找出哪一个: - )