【问题标题】:Android Firebase- Not getting all keys as a list, what should I do?Android Firebase-没有将所有键作为列表,我该怎么办?
【发布时间】:2020-07-26 20:43:09
【问题描述】:

我想获取 recyclerview 中所有键的列表,尝试了一切但一无所获,我不想要键的属性。一旦我在 recyclerview 中获得所有键的列表,然后我将使其可点击,然后我想要被点击的键的属性,请帮助我这个我的最后一年项目。

我没有使用 POJO 类的 setFname 方法,因为我将数据手动放入 Firebase。

package com.fyp.phasse_4;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;


public class foodBasketFragment extends Fragment {

private ArrayList<FoodsModel> foodsModels;
private DatabaseReference foodRef;
private FirebaseAuth mAuth;
private String currentUserID;
RecyclerView recyclerView;
String p;


public foodBasketFragment() {
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable final ViewGroup container,         
@Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_food_basket, container, false);
    foodRef = FirebaseDatabase.getInstance().getReference().child("FoodData");
    mAuth = FirebaseAuth.getInstance();
    FoodsModel model = new FoodsModel()
    recyclerView = view.findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    currentUserID = mAuth.getCurrentUser().getUid();
    foodsModels = new ArrayList<>();
    return view;
}

@Override
public void onStart() {
    super.onStart();
    FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<FoodsModel>()
            .setQuery(foodRef, FoodsModel.class)
            .build();

    FirebaseRecyclerAdapter<FoodsModel, myViewHolder> adapter = new     
FirebaseRecyclerAdapter<FoodsModel, myViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull final myViewHolder holder, final int position, 
@NonNull final FoodsModel model) {

            foodRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                    }
                    holder.name.setText();
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

        }

        @NonNull
        @Override
        public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.foods_list, parent, 
false);
            return new myViewHolder(view);
        }
    };
    recyclerView.setAdapter(adapter);
    adapter.startListening();


}
public static class myViewHolder extends RecyclerView.ViewHolder
{
    TextView name;
    public myViewHolder(@NonNull View itemView) {
        super(itemView);

        name = itemView.findViewById(R.id.txtName);
    }
}

}

这是我的 POJO 课程,

package com.fyp.phasse_4;
public class FoodsModel {
public String fName;

public FoodsModel() {
}
public FoodsModel(String fName) {
    this.fName = fName;
}

public String getfName() {
    return fName;
}

public void setfName(String fName) {
    this.fName = fName;
}
}

【问题讨论】:

  • 我想推荐你使用 pushKey() 而不是普通的 String。
  • 请向我们展示这两个对象之一的内容。也请回复@AlexMamo
  • @AlexMamo 抱歉,我没有得到哪两个对象?
  • 在截图中。在那个红色矩形中。
  • @AlexMamo 现在已经解决了 谢谢兄弟的帮助。

标签: java android android-fragments firebase-realtime-database


【解决方案1】:
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
     String key = dataSnapshot1.getKey();
     System.out.println(key);
}

【讨论】:

  • 1-豆和豌豆,扁豆煮熟,2-豆和豌豆,扁豆,煮熟
  • 你把两个钥匙都拿了两次?
  • 是的,我不知道为什么 :-(,它将所有键作为一个字符串,并且由于我在 firebase 中有 2 个键,所以这就是它显示两次的原因
  • 这很奇怪..因为当我在我的系统中尝试它时,它显示了正确的输出.. 不。打印的键数 = 没有。数据库中的键
  • 为什么要在 onStart() 中初始化回收站视图?尝试将整个 recyclerview 代码放在 onCreateView() 方法中。你的 onStart() 应该有 adapter.startListening();只有.. 也覆盖 onStop() 方法
猜你喜欢
  • 1970-01-01
  • 2019-12-24
  • 2019-07-31
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 2017-03-03
  • 2019-06-01
  • 1970-01-01
相关资源
最近更新 更多