[英]Retrieve data from firebase to android studio as listview
[英]Retrieve Firebase data to ListView in Android Studio
我目前正在构建一个Android应用,并将Firebase用作其后端数据库,但是我很难检索数据并将其显示在ListView
。 我尝试了一些代码,但显示列表活动后,应用程序立即崩溃。
下面是我的数据库的屏幕快照,还有我的代码和尝试运行时遇到的错误:
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.