【问题标题】:My application not retrieving data from firebase child node我的应用程序没有从 firebase 子节点检索数据
【发布时间】:2018-03-17 09:22:46
【问题描述】:

这是我的代码:

不幸的是,当我运行此代码时,您的应用停止错误正在显示。

在 Android Studio 中不显示错误,只有应用程序崩溃。

我想我正在设置参考。

   import android.support.v7.app.AppCompatActivity;
   import android.os.Bundle;
   import android.support.v7.widget.LinearLayoutManager;
   import android.support.v7.widget.RecyclerView;
   import android.view.View;
   import android.widget.TextView;
   import android.widget.Toast;
   import com.firebase.ui.database.FirebaseRecyclerAdapter;
   import com.google.firebase.database.DatabaseReference;
   import com.google.firebase.database.FirebaseDatabase;

 public class FoodActivity extends AppCompatActivity {
 private DatabaseReference mDatabaseRef;
 private RecyclerView mRecycler;
 private FirebaseDatabase mFirebaseDatabase;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_food);
    String data = getIntent().getStringExtra("data");
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    Toast.makeText(this, "select "+data, Toast.LENGTH_SHORT).show();
    mDatabaseRef = mFirebaseDatabase.getReference().child("item/1");
    mRecycler=(RecyclerView) findViewById(R.id.listViewFood);
    mRecycler.setHasFixedSize(true);
    mRecycler.setLayoutManager(new LinearLayoutManager(this));

}

@Override
protected void onStart() {
    super.onStart();
    FirebaseRecyclerAdapter<Food,foodViewHolder> mFirebaseAdapter=new FirebaseRecyclerAdapter<Food, foodViewHolder>(
            Food.class,R.layout.food_list,foodViewHolder.class,mDatabaseRef
    ) {
        @Override
        protected void populateViewHolder(foodViewHolder viewHolder, Food model, int position) {
           viewHolder.setfname(model.getfname());
           viewHolder.setPrice(model.getPrice());
        }
    };
    mRecycler.setAdapter(mFirebaseAdapter);
}

public static class foodViewHolder extends RecyclerView.ViewHolder{
    View mView;
    public foodViewHolder(View itemView) {

        super(itemView);
        mView= itemView;
    }
    public void setfname(String fname){
        TextView tvFood=(TextView) mView.findViewById(R.id.tvFood);
        tvFood.setText(fname);
    }
    public void setPrice(int price){
        TextView tvprice=(TextView) mView.findViewById(R.id.fprice);
        tvprice.setText(String.valueOf(price));
    }
}
}

【问题讨论】:

标签: android firebase


【解决方案1】:

记住要检索数据,您应该在 onStart() 中执行此操作

 @Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

它的作用

FirebaseRecyclerAdapter 使用事件侦听器来监控更改 到 Firebase 查询。要开始侦听数据,请调用 startListening() 方法。你可能想在你的 onStart() 中调用它 方法。确保您已完成所有必要的身份验证 在调用 startListening() 之前读取数据,否则您的查询将失败。

在你的onStop();

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

Similarly, the stopListening() call removes the event listener and all data in the adapter. Call this method when the containing Activity or Fragment stops

编辑:使您的适配器全局化

private FirebaseRecyclerAdapter<Food,foodViewHolder> mFirebaseAdapter;

然后在您的 onStart(); 中更改此内容

FirebaseRecyclerAdapter<Food,foodViewHolder> mFirebaseAdapter=new FirebaseRecyclerAdapter<Food, foodViewHolder>(
            Food.class,R.layout.food_list,foodViewHolder.class,mDatabaseRef....

到这里

mFirebaseAdapter=new FirebaseRecyclerAdapter<Food, foodViewHolder>(
            Food.class,R.layout.food_list,foodViewHolder.class,mDatabaseRef...

希望对你有帮助

编码愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多