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



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

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

我正在尝试从"Object1"中获取关联节点名称的列表。 我正在尝试使用此关联节点名称列表膨胀微调器(这是我布局.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 firebase-database-client@google.com
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)

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

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

ArrayAdapter<>(( 的第二个参数需要文本视图的资源 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);

最新更新