1
DatabaseReference ridesRef = database.getReference("rides");
ridesRef.equalTo(from).orderByChild("from").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i(TAG, "dataSnapshot.getChildrenCount(): " + dataSnapshot.getChildrenCount());
        if (dataSnapshot.getChildrenCount() > 0) {
            ArrayList<Ride> value = (ArrayList<Ride>) dataSnapshot.getValue();

            Log.i(TAG, value.toString());

            for (Ride r : value) { // error occurs here
                Log.i(TAG, "r.getTime:" + r.getTime());
                Log.i(TAG, "getFrom:" + r.getFrom());
            }
        }
    }
});

Log output is:

09-02 18:08:25.070 23651-23651 I/RidesFragment: dataSnapshot.getChildrenCount(): 1

09-02 18:08:25.070 23651-23651 I/RidesFragment: [{to=Hackerscher Markt, userID=0, time=1472831718565, regularly=false, price=0, chosenUserID=0, active=true, places=1, from=Hauptbahnhof Berlin, meetingPointDescription=blaues ei}]

public class Ride {
    private String from;
    private String to;
    private long time;
    private int places;
    private String meetingPointDescription;
    private boolean regularly;
    private boolean active;
    private float price;
    private int userID;
    private int chosenUserID;

    public Ride() {
        // Default constructor required for calls to DataSnapshot.getValue(Ride.class)
    }

    public Ride(String from, String to, long time, int places, String meetingPointDescription, boolean regularly,
                boolean active, float price, int userID, int chosenUserID) {
        this.from = from;
        this.to = to;
        this.time = time;
        this.places = places;
        this.meetingPointDescription = meetingPointDescription;
        this.regularly = regularly;
        this.active = active;
        this.price = price;
        this.userID = userID;
        this.chosenUserID = chosenUserID;
    }

    // automatically generated getters and setters...
}

enter image description here

1 Answer 1

6

Third time I got an answer to my own question :/

ArrayList<Ride> value = (ArrayList<Ride>) dataSnapshot.getValue();

has to be replaced by

GenericTypeIndicator<ArrayList<Ride>> t = new GenericTypeIndicator<ArrayList<Ride>>() {};
ArrayList<Ride> value = dataSnapshot.getValue(t);

and everything works as expected.

Sign up to request clarification or add additional context in comments.

1 Comment

Phew. I'm just glad that you found it, because I always have trouble finding a good example with GenericTypeIndicator. They exist, but are just hard to find (for me at least).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.