【问题标题】:ArrayList Null Pointer Exception playing with ConditionArrayList空指针异常使用条件
【发布时间】:2016-06-02 01:13:04
【问题描述】:

ArrayList NullPointerException (NPE) 仅获取 Google 产品的数据时

这是我得到NPE的那一行:

searchList.add(value); // getting NPE

日志:

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"
      }
   ]
}

现在,我只想fetch data 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);

    }

【问题讨论】:

  • 到底是什么问题?
  • 我只需要获取与 Google 产品相关的数据,您可以看到我的 json 我有一个名为 product 的对象
  • 你的Master 模型看起来怎么样?
  • 抱歉,我认为Master 看起来像JSON
  • 我发布了 Master 和 Value 模型类,请立即查看

标签: java android json retrofit


【解决方案1】:

看起来您从未实例化要使用的列表。我认为像这样更改您的方法将解决您的问题:

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);

}

【讨论】:

    【解决方案2】:

    您所说的Exception 仅在变量searchList 不是指List 的Object 而是指null 时出现。那么,您应该debug code 并找出List object searchList 是否实际指的是null?如果是这样实例化 searchList 在那个特定的 使用new Keyword

    注意:- Dubug 您的应用程序可能会缩短您的问题...

    【讨论】:

      猜你喜欢
      • 2014-02-16
      • 2023-03-05
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      相关资源
      最近更新 更多