gpt4 book ai didi

java - 我想从 Firebase 获取产品 ID

转载 作者:行者123 更新时间:2023-12-02 02:54:39 24 4
gpt4 key购买 nike

我正在从 Firebase 检索产品信息,但问题是我无法选择 Firebase 中存储的任何特定 ID。

我尝试了不同的解决方案来解决该问题,包括get(position),但它获取了产品在 RecyclerView 中的位置

这是 ProductsAdapter onBindViewHolder 函数。

使用 * 添加更改

    @Override
public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) {
Product productCurrent = mProducts.get(position);
holder.product_title.setText(toCapitalize(productCurrent.getpTitle()));
holder.product_pice.setText("$: " + productCurrent.getpPrice());
Picasso.with(mContext)
.load(productCurrent.getpImageUrl())
.placeholder(R.mipmap.ic_launcher)
.fit()
.centerCrop()
.into(holder.product_image);

holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, ProductPreview.class);
intent.putExtra("pImageUrl", productCurrent.getpImageUrl());
intent.putExtra("pTitle", toCapitalize(productCurrent.getpTitle()));
intent.putExtra("pPrice", productCurrent.getpPrice());
intent.putExtra("pDescription", toCapitalize(productCurrent.getpDescription()));

Toast.makeText(mContext, " " + position, Toast.LENGTH_SHORT).show();

mContext.startActivity(intent);

}
});
}

此代码来自具有RecyclerView的ProductsActivity

    private ProductsAdapter mAdapter;

private ProgressBar mProgressBar;

DatabaseReference mDatabaseReference;
private ArrayList<Product> mProducts;
***ArrayList<ProductKeys> mProductKeys;***

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

mRecyclerView = findViewById(R.id.products_recycler_view);
mRecyclerView.setHasFixedSize(true);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(),2);
mRecyclerView.setLayoutManager(gridLayoutManager);
mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);

mProducts = new ArrayList<>();
***mProductKeys = new ArrayList<>();***

mDatabaseReference = FirebaseDatabase.getInstance().getReference("products");

mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapShot : dataSnapshot.getChildren())
{
Product product = postSnapShot.getValue(Product.class);
mProducts.add(product);
***mProductKeys.add(postSnapShot.getKey());***
}
mAdapter = new ProductsAdapter(ProductsActivity.this, mProducts);
mRecyclerView.setAdapter(mAdapter);
mProgressBar.setVisibility(View.INVISIBLE);

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(ProductsActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
mProgressBar.setVisibility(View.INVISIBLE);
}
});

出现错误:

(com.*)
in ArrayList cannot be applied
to
(java.lang.String)

请帮助我解决这个问题...提前致谢

最佳答案

如果您尝试在 onBindViewHolder 方法中确定 position 处项目的 Firebase 数据库 ID,则必须自行维护该映射。您可以通过从 onDataChange 中的快照中提取 getKey()getValue() 并保留两者的列表来轻松完成此操作其中。

类似这样的事情:

mProductKeys = new ArrayList<String>();

mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapShot : dataSnapshot.getChildren())
{
Product product = postSnapShot.getValue(Product.class);
mProducts.add(product);
mProductKeys.add(postSnapShot.getKey());
}
mAdapter = new ProductsAdapter(ProductsActivity.this, mProducts);
mRecyclerView.setAdapter(mAdapter);
mProgressBar.setVisibility(View.INVISIBLE);
}

然后在 onBindViewHolder 中,您可以查找在 mProductKeys 中单击的项目的键。

关于java - 我想从 Firebase 获取产品 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com