Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Final list or array wont store the value

public class from_the_database {

    public String last_entry(String object) {

        DatabaseReference database = FirebaseDatabase.getInstance().getReference();
        final String ok = object;
        final ArrayList<String> list = new ArrayList<String>(); // array to save result
        Query query = database.child("records").orderByChild("object").equalTo(object);

        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists()) {
                    for (DataSnapshot post : dataSnapshot.getChildren()) {
                        Data_model_milk dmm = 
                        post.getValue(Data_model_milk.class);
                        Log.e("value",dmm.getDate()); // this works though
                        list.add("item was added last at " + dmm.getDate()); // not being added
                    }
                } else {
                    list.add("no insert for " + ok); // not being added
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.e("from the db cancelled", databaseError.toString());
            }

        });

        Log.e(object, list.get(0)); // not available
        return list.get(0); // list.get(0) is empty
    }
}

So the problems are dmm.getDate() is returning a value, but it is not being saved in the array list or any other variable which needs to be returned by the main function last_entry

I have used final arrays intitalized with size 0,1 and 10 still nothing seems to work.

like image 640
Adarsha Nepal Avatar asked May 14 '26 18:05

Adarsha Nepal


1 Answers

The approach you are doing, not going to work. I guess you are trying to make your class as a utility class.

You should change the approach, may be below code can help

public class from_the_database {

    public void last_entry(String object, OnDataChangeCallback listener) {

        DatabaseReference database = FirebaseDatabase.getInstance().getReference();
        final String ok = object;
        Query query = database.child("records").orderByChild("object").equalTo(object);

        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (DataSnapshot post : dataSnapshot.getChildren()) {
                        Data_model_milk dmm = 
                        post.getValue(Data_model_milk.class);
                        Log.e("value",dmm.getDate()); // this works though
                        listener.onDataChange("item was added last at " + dmm.getDate());
                    }
                } else {
                    listener.onDataChange("no insert for " + ok);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.e("from the db cancelled", databaseError.toString());
            }

        });
    }

    public interface OnDataChangeCallback{
        void onDataChange(String data);
    }
}

Now call last_entry method like below

last_entry("queryString", new OnDataChangeCallback(){
    public void onDataChange(String data){
      // do something with data
    }
});
like image 149
Krishna Sharma Avatar answered May 16 '26 06:05

Krishna Sharma