Ich mache eine Android App. Es ist mir gelungen, an Firebase zu schreiben. Ich habe jedoch Probleme beim Lesen von Firebase in einem ListView. Wenn jemand helfen kann, die Daten zurück in die App in den ListView zu bekommen, Wenn ich nur einen Gegenstand habe, um zu versuchen und zurück zu lesen, funktioniert es, wenn ich versuche, alle drei Gegenstände zu bekommen, die die App fehlschlägt. Ich habe ein Bild von der Datenbank eingefügt, um eine Vorstellung von der Struktur und meinem Code zu bekommen.Wie erhalte ich Firebase-Daten in einen ListView?
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
public class Admin_ViewEvent extends AppCompatActivity {
// private TextView textViewPersons;
private ListView mListView;
private ArrayList<String> mMeetings = new ArrayList<>();
private Firebase mRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin__view_event);
mRef = new Firebase("https://saica-sgb-77a4f.firebaseio.com/Meetings");
mListView = (ListView) findViewById(R.id.ListView);
//textViewPersons = (TextView) findViewById(R.id.textViewPersons);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mMeetings);
mListView.setAdapter(arrayAdapter);
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
for(DataSnapshot childSnapShot : dataSnapshot.getChildren()) {
String date = (String) childSnapShot.child("address").getValue();
String datetime = (String) childSnapShot.child("datetime").getValue();
String name = (String) childSnapShot.child("name").getValue();
mMeetings.add(date);
mMeetings.add(datetime);
mMeetings.add(name);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
}
}
Was ist das Problem mit dem Code? Das einzige, was ich schnell sehe, ist, dass Sie 'arrayAdapter.notifyDataSetChanged() 'nicht in' onDataChange() 'aufrufen. Ich würde auch empfehlen, einen 'ChildEventListener' zu verwenden, da Sie damit die Listenansicht detaillierter aktualisieren und somit weniger Bildschirmflimmern erhalten. –
@FrankvanPuffelen Hallo, was ich möchte passieren, ist jedes Element in einer eigenen Liste, wie jedes Element in der Firebase ein eigenes Element wird. ZB die erste Taste die 3 Elemente müssen gruppiert und angezeigt werden. –
Klingt wie ein klarer Anwendungsfall. Was funktioniert nicht am aktuellen Code? –