【问题标题】:How can I get the Key from my Firebase Database如何从我的 Firebase 数据库中获取密钥
【发布时间】:2020-08-09 14:54:25
【问题描述】:

每次点击我在 recyclerview 中的项目时,我都想获取特定的密钥。我的代码一切正常,但我无法获得子密钥。我只是想以字符串的形式获取密钥,但是 Toast 结果是位置 0,1,2,3,4 等,除了在这里获取密钥之外一切正常

Firebase 数据库

这是我的活动

private RecyclerView recyclerView;
private FirebaseFirestore firebaseFirestore;
private FirestoreRecyclerAdapter<Upload, SearchListActivity.ImageViewHolder> adapter;

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

    firebaseFirestore = FirebaseFirestore.getInstance();

    recyclerView = findViewById(R.id.search_list_recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    Query query = firebaseFirestore.collection("Dealers");

    FirestoreRecyclerOptions<Upload> options = new FirestoreRecyclerOptions.Builder<Upload>()
            .setQuery(query, Upload.class)
            .build();
    adapter = new FirestoreRecyclerAdapter<Upload, ImageViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull final ImageViewHolder holder, final int position, @NonNull final Upload model) {

            holder.mCompanyName.setText(model.getCompanyName());
            Picasso.get().load(model.getImageUrl()).into(holder.dealerAvatar);

            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    final DatabaseReference clickedUser = FirebaseDatabase.getInstance().getReference().child("Dealers").child(String.valueOf(position));
                        clickedUser.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                String result = clickedUser.getKey();

                                Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
                            }

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

                            }
                        });
                }
            });
        }

        @NonNull
        @Override
        public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.listview_custom_layout, parent, false);

            return new ImageViewHolder(view);
        }
    };
    recyclerView.setAdapter(adapter);
}

public class ImageViewHolder extends RecyclerView.ViewHolder{
    
    public TextView mCompanyName;
    public ImageView dealerAvatar;
    public View mView;
    public ImageViewHolder(@NonNull View itemView) {
        super(itemView);
        mView = itemView;
        mCompanyName = itemView.findViewById(R.id.company_name);
        dealerAvatar = mView.findViewById(R.id.list_view_avatar);

    }
}

这是我的带有 getter 和 setter 的 Upload.class

public class Upload {

private String uid; // <<this will be the key, or I just need to get the key even not using this Upload.class I just need the key
private String companyName;
private String imageUrl;

public Upload(String uid){this.uid = uid}


public Upload(){}


public Upload (String uid, String companyName, String imageUrl){
    this.companyName = companyName;
    this.slogan = email;
    this.companyAddress = companyAddress;
    this.imageUrl = imageUrl;
}

【问题讨论】:

  • 您需要在 Upload 类中保留所需的密钥,以便能够在您的点击侦听器中查找它。

标签: android firebase firebase-realtime-database google-cloud-firestore


【解决方案1】:

Sir Frank van Puffelen 的建议付诸实践 -

您可以从 documentSnapShot 中获取键值 -

@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
    String docuementKey = documentSnapshot.getReference().getId();

    //toast message 
    Toast.makeText(getApplicationContext(), docuementKey, Toast.LENGTH_SHORT).show();
}

然后您可以将其保存在您的上传 POJO 中。

编码愉快!

【讨论】:

  • 感谢 Nikhil Sharma 的回答,但问题是我需要从不在 Firestore 上的数据库中获取密钥 :(
  • Toast.makeText(getApplicationContext(), docuementKey, Toast.LENGTH_SHORT).show() 将为您提供您在问题图像上标记为红色的键值,如果 Firebase Firestore 不是您的数据库,那么您指的是哪个数据库?
  • 我想从我的 Firebase 数据库中获取密钥,而不是从 Firestore,是的,我的 companyName 和 imageUrl 来自 Firestore,但我需要从 FIREBASE 数据库中获取密钥,感谢您的回复 Nikhil Sharma I非常感谢,谢谢,仍在等待 Nikhil 爵士的回复
  • 你能不能发一个屏幕截图来区分FIREBASE DATABASE KEY和FIRESTORE KEY,根据你对两者的理解,你指的是Realtime Database
  • 是的,我指的是 Firebase 实时数据库。谢谢 Nikhil,点赞,我需要获取我的实时数据库的密钥
猜你喜欢
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
相关资源
最近更新 更多