Jake Quinter
Jake Quinter

Reputation: 41

Retrieve Firebase data to ListView in Android Studio

I am currently building an Android app and using Firebase as its backend database, however i'm having difficulties to retrieve the data and display them in a ListView. I tried few codes but the app is crashing as soon as i display the list activity.

Below is a screenshot of my database and also my code and the error I get when I try to run:

Firebase Databse Picture

enter image description here

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) {

        }
    });
}


}

Error Log:

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)

Upvotes: 2

Views: 4125

Answers (3)

this is yash
this is yash

Reputation: 533

Firstly you need to initialize the clientlistView and the you have to set the listview to the adapter,

In your programm you are setting the adapter view without initializing the clientlistview

you need to write your code like this

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

Upvotes: 0

Juanjo Berenguer
Juanjo Berenguer

Reputation: 789

You missed create the instance of your 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");
....

Upvotes: 1

Alex Mamo
Alex Mamo

Reputation: 138824

To solve this, just move the following line of code:

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

right before this line:

clientlistView.setAdapter(adapter);

You first need to instantiate the ListView object before actually using it.

Upvotes: 1

Related Questions