最終的なリストや配列には、値を格納文句を言いません

モデルネパール:
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
    }
}

問題は値をdmm.getDate()戻っているされているが、それは、配列リストまたはメイン機能last_entryによって返される必要がある任意の他の変数に保存されていないので、

私はまだ何も動いていないようにみえサイズ0,1および10でintitalized最終配列を使用していました。

クリシュナ・シャルマ:

あなたがやっているアプローチは、仕事に行くのではありません。私はあなたのユーティリティクラスとしてクラスを作成しようとしていると思います。

あなたがアプローチを変更する必要があり、コードの缶の助けを下回ることがあり

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);
    }
}

今、以下のようなlast_entryメソッドを呼び出します

last_entry("queryString", new OnDataChangeCallback(){
    public void onDataChange(String data){
      // do something with data
    }
});

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=218944&siteId=1