ArrayList Null指针使用Condition进行exception
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
Google product
fetch data
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); }
看起来您永远不会实例化您要使用的列表。 我认为改变你的方法会解决你的问题:
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); }
你所讨论的Exception
只有在它变量searchList
没有引用列表Object
时才会出现,而它引用的是null
。 那么,您应该调试 代码并找出List
对象 searchList
实际上是否指向null? 如果它是使用new
关键字在该特定行 实例化 searchList
。
注意 : – Dubug您的申请可能会缩短您的问题…
- Android app的理想cpu百分比
- 适用于Android的开发语言
- Android:ffmpeg,文件名包含空格
- 如何在LatLng的国家语言中获得Geocoder的结果?
- 解析:如何从本地数据存储中获取Relation(… fromLocalDatastore())?
- 使用Joda-Time Library将字符串转换为Google Tasks API中的DateTime格式
- Android webview.postUrl(url,Encodingutils.getBytes(postData,“BASE64”))从postdata字符串中删除“+”
- 如何在JNI中将int转换为String(?)?
- 等待函数完成执行并使用结果