ArrayList的空指针异常演奏与条件指针、异常、条件、ArrayList

2023-09-06 23:40:58 作者:有个鬼故事叫开学

的ArrayList NullPointerException异常(NPE)而对于谷歌只有产品获取数据

下面就是我得到 NPE 行:

  searchList.add(值); //获得NPE 

日志:

  02-24 14:25:35.903 17269-17269 / app.retrofit_chucknorries E / app.retrofit_chucknorries.MainActivity $ 2:ERROR:空02-24 14:25:35.904 17269-17269 / app.retrofit_chucknorries W / System.err的:显示java.lang.NullPointerException02-24 14:25:35.909 17269-17269 / app.retrofit_chucknorries W / System.err的:在app.retrofit_chucknorries.MainActivity.searchList(MainActivity.java:132)02-24 14:25:35.909 17269-17269 / app.retrofit_chucknorries W / System.err的:在app.retrofit_chucknorries.MainActivity $ 1.call(MainActivity.java:57)02-24 14:25:35.909 17269-17269 / app.retrofit_chucknorries W / System.err的:在app.retrofit_chucknorries.MainActivity $ 1.call(MainActivity.java:51)02-24 14:25:35.909 17269-17269 / app.retrofit_chucknorries W / System.err的:在rx.Observable $ 32.onNext(Observable.java:7187)02-24 14:25:35.909 17269-17269 / app.retrofit_chucknorries W / System.err的:在rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:130)02-24 14:25:35.909 17269-17269 / app.retrofit_chucknorries W / System.err的:在rx.internal.operators.NotificationLite.accept(NotificationLite.java:150)02-24 14:25:35.909 17269-17269 / app.retrofit_chucknorries W / System.err的:在rx.internal.operators.OperatorObserveOn $ ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:189)02-24 14:25:35.909 17269-17269 / app.retrofit_chucknorries W / System.err的:在rx.internal.operators.OperatorObserveOn $ ObserveOnSubscriber.access $ 000(OperatorObserveOn.java:65)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在rx.internal.operators.OperatorObserveOn $ ObserveOnSubscriber $ 2.call(OperatorObserveOn.java:153)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在android.os.Handler.handleCallback(Handler.java:808)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在android.os.Handler.dispatchMessage(Handler.java:103)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在android.os.Looper.loop(Looper.java:193)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在android.app.ActivityThread.main(ActivityThread.java:5299)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在java.lang.reflect.Method.invokeNative(本机方法)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在java.lang.reflect.Method.invoke(Method.java:515)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:829)02-24 14:25:35.910 17269-17269 / app.retrofit_chucknorries W / System.err的:在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)02-24 14:25:35.911 17269-17269 / app.retrofit_chucknorries W / System.err的:在dalvik.system.NativeStart.main(本机方法) 
Java中的空指针异常

JSON

  {   类型:成功,   值:[      {         标识:1,         头衔:Nexus 9保护         产品:谷歌      },      {         ID:2,         头衔:iPhone 6S         产品:苹果      },      {         ID:3,         头衔:iPhone 5,         产品:苹果      },      {         ID:4,         头衔:的Nexus 7         产品:谷歌      }   ]} 

现在,我只想获取数据产品 谷歌

 公共无效searchList(){        如果(searchList =空&放大器;!&放大器;!searchList.isEmpty()){            sea​​rchList.clear();        }        的for(int i = 0; I< valueList.size();我++){            值=(值)valueList.get(ⅰ);            串strProduct = valueList.get(ⅰ).getProduct();            如果(strProduct.equalsIgnoreCase(strSearch)){                  sea​​rchList.add(值); //获得NPE            }        }        mAdapter =新MainAdapter(searchList,R.layout.card_row,getApplicationContext());        mRecyclerView.setAdapter(mAdapter);    } 

解决方案

它看起来像你从来没有实例化你的列表中使用。我想改变这样的方法将解决您的问题:

 公共无效searchList(){     如果(searchList == NULL){         sea​​rchList =新的ArrayList<>();     }其他{         sea​​rchList.clear();     }     的for(int i = 0; I< valueList.size();我++){       ...     }     mAdapter =新MainAdapter(searchList,R.layout.card_row,getApplicationContext());     mRecyclerView.setAdapter(mAdapter);} 

ArrayList NullPointerException (NPE) while fetching data for the product of Google only

Here is the line where I am getting NPE:

searchList.add(value); // getting NPE

Log:

02-24 14:25:35.903 17269-17269/app.retrofit_chucknorries E/app.retrofit_chucknorries.MainActivity$2: ERROR: null
02-24 14:25:35.904 17269-17269/app.retrofit_chucknorries W/System.err: java.lang.NullPointerException
02-24 14:25:35.909 17269-17269/app.retrofit_chucknorries W/System.err:     at app.retrofit_chucknorries.MainActivity.searchList(MainActivity.java:132)
02-24 14:25:35.909 17269-17269/app.retrofit_chucknorries W/System.err:     at app.retrofit_chucknorries.MainActivity$1.call(MainActivity.java:57)
02-24 14:25:35.909 17269-17269/app.retrofit_chucknorries W/System.err:     at app.retrofit_chucknorries.MainActivity$1.call(MainActivity.java:51)
02-24 14:25:35.909 17269-17269/app.retrofit_chucknorries W/System.err:     at rx.Observable$32.onNext(Observable.java:7187)
02-24 14:25:35.909 17269-17269/app.retrofit_chucknorries W/System.err:     at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:130)
02-24 14:25:35.909 17269-17269/app.retrofit_chucknorries W/System.err:     at rx.internal.operators.NotificationLite.accept(NotificationLite.java:150)
02-24 14:25:35.909 17269-17269/app.retrofit_chucknorries W/System.err:     at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:189)
02-24 14:25:35.909 17269-17269/app.retrofit_chucknorries W/System.err:     at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.access$000(OperatorObserveOn.java:65)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:153)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at android.os.Handler.handleCallback(Handler.java:808)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:103)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at android.os.Looper.loop(Looper.java:193)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5299)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at java.lang.reflect.Method.invoke(Method.java:515)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
02-24 14:25:35.910 17269-17269/app.retrofit_chucknorries W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
02-24 14:25:35.911 17269-17269/app.retrofit_chucknorries W/System.err:     at dalvik.system.NativeStart.main(Native Method)

JSON

{
   "type":"success",
   "value":[
      {
         "id":1,
         "title":"Nexus 9",
         "product":"Google"
      },
      {
         "id":2,
         "title":"iPhone 6S",
         "product":"Apple"
      },
      {
         "id":3,
         "title":"iPhone 5",
         "product":"Apple"
      },
      {
         "id":4,
         "title":"Nexus 7",
         "product":"Google"
      }
   ]
}

Now, I just want to fetch data for the product Google

public void searchList() {

        if(searchList != null && !searchList.isEmpty()) {
            searchList.clear();
        }

        for (int i = 0; i < valueList.size(); i++) {
            value = (Value) valueList.get(i);

            String strProduct = valueList.get(i).getProduct();

            if (strProduct.equalsIgnoreCase(strSearch)){
                  searchList.add(value); // getting NPE
            }
        }

        mAdapter = new MainAdapter(searchList, R.layout.card_row, getApplicationContext());
        mRecyclerView.setAdapter(mAdapter);

    }

解决方案

It looks like you never instantiate your list to use. I think changing your method like this will fix your issue:

public void searchList() {

     if (searchList == null) {
         searchList = new ArrayList<>();
     } else {
         searchList.clear();
     }

     for (int i = 0; i < valueList.size(); i++) {
       ...
     }

     mAdapter = new MainAdapter(searchList, R.layout.card_row, getApplicationContext());
     mRecyclerView.setAdapter(mAdapter);

}