【问题标题】:Retrieve Firebase data to ListView in Android Studio将 Firebase 数据检索到 Android Studio 中的 ListView
【发布时间】:2018-09-04 13:12:26
【问题描述】:

我目前正在构建一个 Android 应用程序并使用 Firebase 作为其后端数据库,但是我很难检索数据并将它们显示在 ListView 中。我尝试了一些代码,但是一旦我显示列表活动,应用程序就会崩溃。

下面是我的数据库的屏幕截图,还有我的代码以及我尝试运行时遇到的错误:

Firebase Databse Picture

public class ClientLIstActivity extends AppCompatActivity {

private Button clientSelect;
private ListView clientlistView;
private FirebaseDatabase database;
private DatabaseReference databaseReference;

private ArrayList<String> list = new ArrayList<String>();
private ArrayAdapter<String> adapter;

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


    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list);
    clientlistView.setAdapter(adapter);
    adapter.notifyDataSetChanged();
    databaseReference = FirebaseDatabase.getInstance().getReference().child("Clients");

    clientlistView = (ListView) findViewById(R.id.clientListView);
    clientSelect = (Button) findViewById(R.id.selectClient);

    clientSelect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onBackPressed();
        }
    });

    databaseReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
           String value = dataSnapshot.getValue(String.class);
           list.add(value);
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}


}

错误日志:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.javytharanee.quicksolattendance, PID: 6602
                  com.google.firebase.database.DatabaseException: Failed to convert value of type java.util.HashMap to String
                      at com.google.android.gms.internal.zzepg.zzb(Unknown Source:93)
                      at com.google.android.gms.internal.zzepg.zza(Unknown Source:0)
                      at com.google.firebase.database.DataSnapshot.getValue(Unknown Source:10)
                      at com.javytharanee.quicksolattendance.ClientLIstActivity$2.onChildAdded(ClientLIstActivity.java:53)
                      at com.google.android.gms.internal.zzegg.zza(Unknown Source:71)
                      at com.google.android.gms.internal.zzelk.zzcal(Unknown Source:2)
                      at com.google.android.gms.internal.zzelq.run(Unknown Source:71)
                      at android.os.Handler.handleCallback(Handler.java:873)
                      at android.os.Handler.dispatchMessage(Handler.java:99)
                      at android.os.Looper.loop(Looper.java:193)
                      at android.app.ActivityThread.main(ActivityThread.java:6669)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

【问题讨论】:

标签: java android firebase firebase-realtime-database


【解决方案1】:

要解决这个问题,只需移动以下代码行:

clientlistView = (ListView) findViewById(R.id.clientListView);

就在这一行之前:

clientlistView.setAdapter(adapter);

在实际使用之前,您首先需要实例化ListView 对象。

【讨论】:

  • 我试过这个,但仍然得到一个错误,但不同。看起来它无法从我的 Clients 对象类将 Hashmap 转换为 String。我更新了我的错误日志,你能检查一下吗?
  • 你得到另一个错误的事实,这意味着最初的错误消失了,这是个好消息 :) 但这听起来是一个新问题,基本上是另一个我无法在评论或回复中回复的问题仅使用上面的数据。作为个人猜测,我认为您使用了错误的数据库引用,但为了遵守本社区的规则,请使用MCVE 发布另一个新问题,以便我和其他用户可以帮助您。
  • 我不知道它是否修复了它,因为现在还有另一个错误,所以一旦修复了我会接受它
  • @JakeQuinter 由于您提出问题的错误已经消失,这意味着问题已解决。换句话说,这个问题可以被认为是接近的。从这一刻起,您可能会遇到一个或多个其他错误,但这并不意味着这个问题没有解决。但是,好的,请随时通知我。
  • @JakeQuinter 你也可以给我一个新问题的链接。
【解决方案2】:

您错过了创建列表视图的实例 clientListView = findViewById(R.id.your_listView_id);

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

    clientListView = findViewById(R.id.your_listView_id);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list);
    clientlistView.setAdapter(adapter);
    adapter.notifyDataSetChanged();
    databaseReference = FirebaseDatabase.getInstance().getReference().child("Clients");
....

【讨论】:

    【解决方案3】:

    首先你需要初始化clientlistView并且你必须将listview设置为适配器,

    在您的程序中,您正在设置适配器视图而不初始化客户端列表视图

    你需要这样写你的代码

    clientListView = findViewById(R.id.your_listView_id);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list);
    clientlistView.setAdapter(adapter);
    

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多