簡體   English   中英

將Firebase數據檢索到Android Studio中的ListView

[英]Retrieve Firebase data to ListView in Android Studio

我目前正在構建一個Android應用,並將Firebase用作其后端數據庫,但是我很難檢索數據並將其顯示在ListView 我嘗試了一些代碼,但顯示列表活動后,應用程序立即崩潰。

下面是我的數據庫的屏幕快照,還有我的代碼和嘗試運行時遇到的錯誤:

Firebase數據庫圖片

在此處輸入圖片說明

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)

要解決此問題,只需移動以下代碼行:

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

就在這行之前:

clientlistView.setAdapter(adapter);

在實際使用ListView對象之前,您首先需要實例化它。

您錯過了創建列表視圖的實例的步驟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");
....

首先,您需要初始化clientlistView,並且必須將listview設置為適配器,

在您的程序中,您正在設置適配器視圖而不初始化clientlistview

您需要這樣編寫代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM