java - 如何从firebase中检索所有值?
问题描述
数据库
我想从我的 firebase 中检索所有值,但它只检索了最后一个值“hjh”,我做错了什么?
这是我的代码
public class MainActivity extends AppCompatActivity {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("content");
ArrayList<String> postList = new ArrayList<>();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference contentRef = rootRef.child("Post");
ValueEventListener value_l;
TextView content_view;
ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
//setContentView(R.layout.post_info);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
content_view = (TextView) findViewById(R.id.contentTextview);
listview = (ListView) findViewById(R.id.listview);
value_l = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
String contentText = ds.child("content").getValue(String.class);
postList.add(contentText);
//FOR ARRAYLIST TESTING content_view.setText(postList.get(postList.size()-1));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { }
};
谢谢 :)
解决方案
您应该尝试此代码,它可能会对您有所帮助。
1) 主要活动
public class MainActivity extends AppCompatActivity {
private RecyclerView rvData;
private RetriveDataAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rvData = findViewById(R.id.rvData);
rvData.setHasFixedSize(true);
rvData.setLayoutManager(new LinearLayoutManager(MainActivity.this));
DatabaseReference database = FirebaseDatabase.getInstance().getReference();
database.child("Post").addValueEventListener(new ValueEventListener() {
@SuppressLint("LongLogTag")
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<MyBean> arrayList = new ArrayList<MyBean>();
for (DataSnapshot noteDataSnapshot : dataSnapshot.getChildren()) {
MyBean bean = noteDataSnapshot.getValue(MyBean.class);
arrayList.add(bean);
}
Log.e("MainActivity.this", "Data list ::>>>>>" + arrayList.size());
adapter = new RetriveDataAdapter(MainActivity.this, arrayList);
rvData.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
2)我的豆
public class MyBean {
public String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
3) 检索数据适配器
public class RetriveDataAdapter extends RecyclerView.Adapter<RetriveDataAdapter.MyViewHolder> {
private static final String TAG = "RetriveDataAdapter.class";
private Context ctx;
private ArrayList<MyBean> dataList;
@SuppressLint("LongLogTag")
public RetriveDataAdapter(Context context, ArrayList<MyBean> dataList) {
this.ctx = context;
this.dataList = dataList;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tvContent;
public MyViewHolder(View view) {
super(view);
tvContent = view.findViewById(R.id.tvContent);
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_form, parent, false);
return new MyViewHolder(itemView);
}
@SuppressLint("LongLogTag")
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final MyBean bean = dataList.get(position);
holder.tvContent.setText("Content: " + bean.getContent());
}
@Override
public int getItemCount() {
return dataList.size();
}
}
推荐阅读
- google-cloud-platform - 如何将 Bigquery 数据集和 DAG 从一个 GCP 组织转移/移动到另一个 GCP 组织
- go - 如何使用 SingleFlight 共享下载的大文件?
- javascript - API调用特定文档的问题
- reactjs - 想要设置 boxShadow 和 borderRadius 使其默认并将其添加到 Material-UI 反应项目中的 Material UI 主题
- javascript - 基于单选框的动态表单域
- javascript - React Native map 函数不能在同一个类中使用函数
- swift - 在 Firebase 中更新集合返回错误“在展开可选值时发现 nil”?
- android - android 上的 setRemoteDescription 在浏览器之间工作的 SDP 上失败。为什么?
- php - CodeIgniter/Smarty:如何从数据库中读取 {$var}?
- angular - 重置 Angular 的 Mat 数据表搜索过滤器