我已将数据从 firestore 加载到 Searchable Spinner,但过滤 searchablespinner 的结果使我的应用程序崩溃
I have loaded data into Searchable Spinner from firestore but filtering the results of searchablespinner is crashing my app
我的 firestore 数据库中的数据已成功加载到我的可搜索微调器中,但在尝试过滤我的项目时(即,在搜索可搜索微调器时),我的应用程序崩溃了。 First Screenshot Image
从上图中我们可以清楚地看到可搜索微调器正在从我的云 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 的详细信息中得到的,表明存在空指针异常(但我已经正确初始化了我的数组列表)
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();
}
});
我的 firestore 数据库中的数据已成功加载到我的可搜索微调器中,但在尝试过滤我的项目时(即,在搜索可搜索微调器时),我的应用程序崩溃了。 First Screenshot Image
从上图中我们可以清楚地看到可搜索微调器正在从我的云 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 的详细信息中得到的,表明存在空指针异常(但我已经正确初始化了我的数组列表)
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();
}
});