首页 > 解决方案 > 我已将数据从 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)

提前致谢

标签: androidfirebasegoogle-cloud-firestoreandroid-spinner

解决方案


您收到错误是因为您尝试使用空列表填充适配器,因为您没有再次向适配器添加或设置当事方列表。

您可以使用以下代码:

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

推荐阅读