android - 我已将数据从 firestore 加载到 Searchable Spinner 但过滤 searchablespinner 的结果会使我的应用程序崩溃
问题描述
我的 firestore 数据库中的数据已成功加载到我的可搜索微调器中,但在尝试过滤我的项目时(即,在搜索可搜索微调器时),我的应用程序崩溃了。第一个截图图像
从上图中,我们可以清楚地看到可搜索微调器正在从我的云 Firestore 数据库中填充。
直到此时一切正常,数据从 Firestore 正确加载,一切似乎都运行良好,直到Second Screenshot Image
一旦我在可搜索微调器的搜索视图中输入我的第一个字母,我的应用就会崩溃,如上面的屏幕截图所示
代码:
parties=new ArrayList<>();
arrayAdapter = new ArrayAdapter<String>(cartActivity.this, android.R.layout.simple_list_item_1, parties);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
searchableSpinner.setAdapter(arrayAdapter);
db.collection("/RootCollection/partyDocument/partyCollection")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for(QueryDocumentSnapshot documentSnapshot:queryDocumentSnapshots){
partyMaster pm=documentSnapshot.toObject(partyMaster.class);
parties.add(pm.getName());
arrayAdapter.notifyDataSetChanged();
/*Object objectName=documentSnapshot.get("name");
String partyName=objectName.toString();
parties.add(partyName);*/
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(cartActivity.this,"Error ",Toast.LENGTH_SHORT).show();
}
});
这部分我从 logcat 的详细信息中得到,表明存在空指针异常(但我已经正确初始化了我的数组列表)
日志猫:
--------- beginning of crash
06-11 15:58:42.244 8801-8801/com.example.user1.salesmanapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user1.salesmanapp, PID: 8801
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:337)
at android.widget.AdapterView.checkFocus(AdapterView.java:737)
at android.widget.AdapterView$AdapterDataSetObserver.onInvalidated(AdapterView.java:860)
at android.widget.AbsListView$AdapterDataSetObserver.onInvalidated(AbsListView.java:6749)
at android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:50)
at android.widget.BaseAdapter.notifyDataSetInvalidated(BaseAdapter.java:59)
at android.widget.ArrayAdapter$ArrayFilter.publishResults(ArrayAdapter.java:546)
at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5740)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:766)
提前致谢
解决方案
您收到错误是因为您尝试使用空列表填充适配器,因为您没有再次向适配器添加或设置当事方列表。
您可以使用以下代码:
db.collection("/RootCollection/partyDocument/partyCollection")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
parties=new ArrayList<>();
for(QueryDocumentSnapshot documentSnapshot:queryDocumentSnapshots){
partyMaster pm=documentSnapshot.toObject(partyMaster.class);
parties.add(pm.getName());
}
arrayAdapter = new ArrayAdapter<String>(cartActivity.this,
android.R.layout.simple_list_item_1,parties);
arrayAdapter.
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
searchableSpinner.setAdapter(arrayAdapter);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(cartActivity.this,"Error ",Toast.LENGTH_SHORT).show();
}
});
推荐阅读
- python - 为什么我的锥形/角度渐变图像失真?
- windows - VS React-Redux 容器连接到 api-sqlserver 容器
- python - 将函数的参数与其在 Python 中的名称进行比较的实践如何?
- javascript - 如何使用 JavaScript/JQuery 设置 PayPal 运费
- python-3.x - MongoDB Aggregate - 按月对带有时间戳(int)的字段进行分组
- sql - 根据下一行和 ID 选择数据
- android - 热重载不起作用,但在 Android Studio 中热重启有效
- c++ - 跳过列表,为什么我们需要不止一个插入?
- tizen - 在 Galaxy Watch 上使用系统图标
- node.js - Reactjs 时区转换