【问题标题】:Retrieve data from google firebase and display in list view in android studio app从 google firebase 检索数据并在 android studio 应用程序的列表视图中显示
【发布时间】:2018-04-23 16:06:45
【问题描述】:

我和我的团队正在开发一个 android studio 项目。我们可以将数据添加到 Firebase。我们正在尝试从数据库中检索数据,但我们认为我们无法引用正确的 ID 来检索列表视图中的数据。我们正在尝试在 Feedings 类下检索金额、类型和开始。 This is how our firebase database is set up.

这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_feeding_list);

    mListView = (ListView) findViewById(R.id.listView);

    mAuth = FirebaseAuth.getInstance();
    database = FirebaseDatabase.getInstance();
    //myRef = database.getReference();
    FirebaseUser user = mAuth.getCurrentUser();
    userID = user.getUid();
    myRef = database.getReference("/Users/" + userID + "/Feedings");

    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if(user != null){
                Log.d(TAG, "Signed in" + user.getUid());
                toastMessage("Successfully signed in: ");
            }else{
                Log.d(TAG, "Currently signed out");
            }

        }
    };

    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            showData(dataSnapshot);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

private void showData(DataSnapshot dataSnapshot) {
    for(DataSnapshot ds: dataSnapshot.getChildren()){
        Feeding feeding = new Feeding();
        feeding.setAmount(ds.child(userID).getValue(Feeding.class).getAmount());

        Log.d(TAG, "showData: name: " + feeding.getAmount());

        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add(feeding.getAmount());
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, arrayList);
        mListView.setAdapter(adapter);
    }
}

@Override
public void onStart(){
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop(){
    super.onStop();
    if(mAuthListener != null){
        mAuth.removeAuthStateListener(mAuthListener);
    }
}


private void toastMessage(String message){
    Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}

}

【问题讨论】:

  • 没有输出,应用程序崩溃。我运行了调试器,发现问题出在引用数据库上。

标签: java android firebase firebase-realtime-database


【解决方案1】:

尝试使用这样的参考,它在官方文档中提供。 并注意您的 ShowData 方法不正确。

myRef = database.getReference();  

  myRef.child("Users").child(userID).child("Feedings")
   .getReference().addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            showData(dataSnapshot);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });




private void showData(DataSnapshot dataSnapshot) {
    ArrayList<String> arrayList = new ArrayList<>();

    for(DataSnapshot ds: dataSnapshot.getChildren()){
        Feeding feeding = ds.getValue(Feeding.class);
        Log.d(TAG, "showData: name: " + feeding.getAmount());
        arrayList.add(feeding.getAmount());

    }


        ArrayAdapter adapter = new 
        ArrayAdapter(this,android.R.layout.simple_list_item_1, arrayList);
        mListView.setAdapter(adapter);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多