我如何用Firebase实时数据库中的关联节点名称列表填充'Spinner'?

问题描述 投票:0回答:1

假设我具有以下Firebase实时数据库结构:

{
    "Object1" : {
        "A" : "exampleData",
        "B" : "exampleData",
        "C" : "exampleData",
        "D" : "exampleData"
    }
}

我正在尝试从“ Object1”中获取关联的节点名称的列表。我正在尝试使用此关联节点名称列表进行Inflate Spinner(这是我的layout.xml的一部分)。因此,微调器将包含以下选项:A,B,C,D

我正在这样尝试:(只是一小段)

@Override
protected void onCreate(@Nullable Bundle savedInstanceState {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.MyActivity);

      Spinner spinner = findViewById(R.id.MySpinner);
      database = FirebaseDatabase.getInstance();
      dbRef = database.getReference("Object1");

      dbRef.addValueEventListener(new ValueEventListener() {
           @Override
           public void onDataChange (@NonNull DataSnapshot dataSnapshot) {
                ArrayList<String> arrList = new ArrayList<String>();
                    for (DataSnapshot snap : dataSnapshot.getChildren()) {
                        arrList.add(snap.getKey());
                    }

                    ArrayAdapter<String> arrAdapter = new ArrayAdapter<String>(MyActivity.this,R.layout.MyActivity, arrList);
                    spinner.setAdapter(arrAdapter);
          }
      });
}

运行此活动后,应用程序“崩溃”,并发生错误。如有必要,我还可以提供LogCat的摘录。

期望:检索与Object1关联的节点列表,并使用此列表填充微调器。

这里是Logcat的报告:

(只是错误)

E/RunLoop: Uncaught exception in Firebase Database runloop (3.0.0). Please report to [email protected]
java.lang.NoClassDefFoundError: com.google.firebase.database.android.AndroidAuthTokenProvider$3
    at com.google.firebase.database.android.AndroidAuthTokenProvider.produceIdTokenListener(com.google.firebase:firebase-database@@16.0.4:85)
    at com.google.firebase.database.android.AndroidAuthTokenProvider.addTokenChangeListener(com.google.firebase:firebase-database@@16.0.4:80)
    at com.google.firebase.database.core.Repo.deferredInitialization(com.google.firebase:firebase-database@@16.0.4:109)
    at com.google.firebase.database.core.Repo.access$000(com.google.firebase:firebase-database@@16.0.4:55)
    at com.google.firebase.database.core.Repo$1.run(com.google.firebase:firebase-database@@16.0.4:94)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)
java android android-studio
1个回答
0
投票

您已在其中提供活动的布局文件

  ArrayAdapter<String> arrAdapter = new ArrayAdapter<String>(MyActivity.this,R.layout.MyActivity, arrList);

ArrayAdapter <>()的第二个参数要求如错误消息中所述的TextView的资源ID

java.lang.IllegalStateException:ArrayAdapter要求资源ID为TextView

您可以如下使用R.layout.support_simple_spinner_dropdown_item代替

ArrayAdapter<String> arrAdapter = new ArrayAdapter<String>(MyActivity.this,R.layout.support_simple_spinner_dropdown_item,arrList);
© www.soinside.com 2019 - 2024. All rights reserved.