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.
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
}
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With