我怎样才能得到卖家的产品
Posted
技术标签:
【中文标题】我怎样才能得到卖家的产品【英文标题】:how can I get the products of the sellers 【发布时间】:2019-08-04 04:36:32 【问题描述】:我比较了其他问题,但他们有不同的问题。 我的问题是,如何(在用户活动中)显示卖家在 firebase 数据库中添加的所有产品? 卖家在添加产品之前有自己的注册和登录活动,这意味着每个卖家都将拥有自己的姓名或 ID。 您可以在下图中查看我的数据库示例。
**Sorry guys I have updated the code but now it is crashing the app every time I click the button to go to the add products activity**
公共类 SellerAddProductActivity 扩展 AppCompatActivity
private String saveCurrentDate; private String saveCurrentTime; private String CategoryName; private String downloadImageUrl; private String productRandomKey; private String Description; private String Price, Quantity, State; private String Pname, Store; private Button AddProductButton; private EditText InputProductName; private EditText InputProductPrice, InputStoreName; private EditText InputProductDescription, InputProductQauntity, InputProductState; private StorageReference ProductImageRef; private Uri ImageUri; private DatabaseReference ProductsRef, ProductsInfo; private ProgressDialog loadingBar; private static final int GalleryPick = 1; private ImageView InputProductImage; FirebaseUser currentUser; FirebaseUser mAuth; String userID = mAuth.getUid(); //--> Store each seller name with this ID @Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_seller_add_product); ProductImageRef = FirebaseStorage.getInstance().getReference().child("Product Images"); CategoryName = getIntent().getExtras().get("category").toString(); ProductsRef = FirebaseDatabase.getInstance().getReference().child("Products"); ProductsInfo = FirebaseDatabase.getInstance().getReference().child("ProductsInfo"); mAuth = FirebaseAuth.getInstance().getCurrentUser(); AddProductButton = (Button) findViewById(R.id.add_product); InputProductName = (EditText) findViewById(R.id.product_name); InputProductImage = (ImageView) findViewById(R.id.product_image_select); InputProductPrice = (EditText) findViewById(R.id.product_price); InputProductQauntity = (EditText) findViewById(R.id.product_quantity); InputProductState = (EditText) findViewById(R.id.product_state); InputStoreName = (EditText) findViewById(R.id.store_name); loadingBar = new ProgressDialog(this); InputProductDescription = (EditText) findViewById(R.id.product_description); InputProductImage.setOnClickListener(new View.OnClickListener() @Override public void onClick(View v) OpenGallery(); ); AddProductButton.setOnClickListener(new View.OnClickListener() @Override public void onClick(View v) validateProductData(); ); private void OpenGallery() Intent galleryIntent = new Intent(); galleryIntent.setAction(Intent.ACTION_GET_CONTENT); galleryIntent.setType("image/*"); startActivityForResult(galleryIntent, GalleryPick); @Override protected void onActivityResult (int requestCode, int resultCode, @Nullable Intent data) super.onActivityResult(requestCode, resultCode, data); if (requestCode == GalleryPick && resultCode == RESULT_OK && data != null) ImageUri = data.getData(); InputProductImage.setImageURI(ImageUri); private void validateProductData() Description = InputProductDescription.getText().toString(); Price = InputProductPrice.getText().toString(); Pname = InputProductName.getText().toString(); Quantity = InputProductQauntity.getText().toString(); State = InputProductState.getText().toString(); Store = InputStoreName.getText().toString(); if (ImageUri == null) Toast.makeText(this, "Please Add Product Image!", Toast.LENGTH_SHORT).show(); else if (TextUtils.isEmpty(Description)) Toast.makeText(this, "Please Enter the Product Description!", Toast.LENGTH_SHORT).show(); else if (TextUtils.isEmpty(Price)) Toast.makeText(this, "Please Enter the Product Price!", Toast.LENGTH_SHORT).show(); else if (TextUtils.isEmpty(Pname)) Toast.makeText(this, "Please Enter the Product Name!", Toast.LENGTH_SHORT).show(); else if (TextUtils.isEmpty(Quantity)) Toast.makeText(this, "Enter Quantity in Number!", Toast.LENGTH_SHORT).show(); else if (TextUtils.isEmpty(State)) Toast.makeText(this, "Specify the State of your Product!", Toast.LENGTH_SHORT).show(); else if (TextUtils.isEmpty(Store)) Toast.makeText(this, "Store Name is Mandatory!", Toast.LENGTH_SHORT).show(); else StoreProductInfo(); private void StoreProductInfo() loadingBar.setTitle("Adding Product"); loadingBar.setMessage("Please wait!"); loadingBar.setCanceledOnTouchOutside(false); loadingBar.show(); Calendar calendar = Calendar.getInstance(); SimpleDateFormat currentDate = new SimpleDateFormat("MMM dd, yyyy"); saveCurrentDate = currentDate.format(calendar.getTime()); SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm:ss a"); saveCurrentTime = currentTime.format(calendar.getTime()); // Unique Random Key for the Products added by the admin productRandomKey = saveCurrentDate + saveCurrentTime; // Unique Random Key to store the image added by the admin final StorageReference filePath = ProductImageRef. child(ImageUri.getLastPathSegment() + productRandomKey + ".jpg"); final UploadTask uploadTask = filePath.putFile(ImageUri); //Displaying the Upload Error to the seller uploadTask.addOnFailureListener(new OnFailureListener() @Override public void onFailure(@NonNull Exception e) String message = e.toString(); Toast.makeText(SellerAddProductActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show(); loadingBar.dismiss(); ).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) Toast.makeText(SellerAddProductActivity.this, "Image Uploaded!", Toast.LENGTH_SHORT).show(); Task<Uri> uriTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() @Override public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception if (!task.isSuccessful()) throw task.getException(); downloadImageUrl = filePath.getDownloadUrl().toString(); return filePath.getDownloadUrl(); ).addOnCompleteListener(new OnCompleteListener<Uri>() @Override public void onComplete(@NonNull Task<Uri> task) if (task.isSuccessful()) downloadImageUrl = task.getResult().toString(); Toast.makeText(SellerAddProductActivity.this, "Product Image Added",
toast.length_short).show();
SaveProductInfoToDatabase(); ); ); private void SaveProductInfoToDatabase() HashMap<String, Object> productMap = new HashMap<>(); productMap.put("pid", productRandomKey); productMap.put("storename", Store); productMap.put("date", saveCurrentDate); productMap.put("time", saveCurrentTime); productMap.put("description", Description); productMap.put("image", downloadImageUrl); productMap.put("Category", CategoryName); productMap.put("state", State); productMap.put("quantity", Quantity); productMap.put("price", Price); productMap.put("pname", Pname); ProductsRef.child("Products").child(userID).child(productRandomKey); ProductsInfo.child(productRandomKey).updateChildren(productMap) .addOnCompleteListener(new OnCompleteListener<Void>() @Override public void onComplete(@NonNull Task<Void> task) if (task.isSuccessful()) Intent intent = new Intent(SellerAddProductActivity.this, SellerAddProductActivity.class); startActivity(intent); loadingBar.dismiss(); Toast.makeText(SellerAddProductActivity.this, "Product
添加“,toast.length_short).show(); 别的 loadingBar.dismiss(); 字符串message = task.getexception()。ToString(); Toast.MakeText(SellerAddProductivity.this, “错误:”+消息,toast.length_short).show(); );
这就是我在买家/用户活动中展示产品的方式
公共类 HomeActivity 扩展 AppCompatActivity 实现 NavigationView.annavigationItemselectedListener
private DatabaseReference productsRef; private RecyclerView recyclerView; RecyclerView.LayoutManager layoutManager; @Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); productsRef = FirebaseDatabase.getInstance().getReference().child("Products"); recyclerView = findViewById(R.id.recycler_menu); recyclerView.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); @Override protected void onStart() super.onStart(); FirebaseRecyclerOptions<Products> options = new FirebaseRecyclerOptions.Builder<Products>() .setQuery(productsRef, Products.class).build(); FirebaseRecyclerAdapter<Products, ProductsViewHolder> adapter = new FirebaseRecyclerAdapter<Products, ProductsViewHolder>(options) @Override protected void onBindViewHolder(@NonNull ProductsViewHolder holder,int position,@NonNull final Products model) holder.txtProductName.setText(model.getPname()); holder.txtProductPrice.setText("Price " + model.getPrice() + "$"); Picasso.get().load(model.getImage()).into(holder.imageView); //sending the product ID to the ProductDetailsActivity holder.itemView.setOnClickListener(new View.OnClickListener() @Override public void onClick(View v) Intent intent = new Intent(HomeActivity.this, ProductDetailsActivity.class); intent.putExtra("pid", model.getPid()); startActivity(intent); ); @NonNull @Override public ProductsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_products,parent,false); ProductsViewHolder holder = new ProductsViewHolder(view); return holder; ; GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), 2); recyclerView.setLayoutManager(gridLayoutManager); adapter.startListening(); recyclerView.setAdapter(adapter);
【问题讨论】:
请添加数据库样本。 span> 【参考方案1】:据我了解,您希望将所有卖家信息显示给在您的应用中登录的人。
为此,您可以在产品内部执行 for 循环以获取每个卖家 ID,然后查询每个用户以获取产品。
但您需要更改数据库结构以使其更容易。
我建议您在嵌套子产品中存储该产品的 ID 以在另一个表中查询。例如
Products
|
--- userID
|
--- Products
|
--- product_key1: true
|
--- product_key2: true
然后在另一个节点有那个产品的信息
ProductsInfo
|
--- product_key1
| |
| --- productName: "Orange"
| |
| --- productPrice: 1
|
--- product_key2
|
--- productName: "Pineapple"
|
--- productPrice: 3
所以现在,我们将只获取每个用户 ID 并获取每个用户的产品
首先,您应该使用getUid()
来获取每个卖家唯一的 UID,而不是硬编码卖家名称。
FirebaseAuth mAuth;
mAuth = FirebaseAuth.getInstance().getCurrentUser();
String userID = mAuth.getUid(); //--> Store each seller name with this ID
现在我们只需在 Products 中循环获取每个用户 ID
mRef.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
for(DataSnapshot ds : dataSnapshot.getChildren())
String userKey = ds.getKey();
Log.d("SellersID", userKey);
@Override
public void onCancelled(DatabaseError databaseError)
);
现在您拥有所有卖家密钥,您可以在 products
内循环并获取每个卖家的每个产品密钥,然后您现在可以从 ProductsInfo
节点获取数据
【讨论】:
感谢您重播 Gastón Saillén。我需要为 FirebaseAuth 创建一个类吗?也许您想看看我是如何将产品添加到数据库中的。 表示模式的相同风格:) 伙计们,如果我必须在用户 HomeActivity(买家)或卖家(添加 productsActivity)中创建 FirebaseAuth 类,我仍然感到困惑。对不起,伙计们,我是新手使用 android studio 和 firebase 数据库。 @AlexMamo hahah,alt + 124 和下划线是我们的朋友 :) @user9833216 您不需要创建 FirebaseAuth 类,您在问题中说您已经有用户登录,只需更改放置 child("d")... for child(userID )【参考方案2】:您的问题出在您的数据库参考productsRef
您应该根据您希望从数据库中获取的内容,在参考中添加更多内容:
productsRef = FirebaseDatabase.getInstance().getReference().child("Products").child("here you put seller name"); // in your case the seller name is "d"
希望对您有所帮助。想了解更多请咨询我
【讨论】:
如果我放“d”,只会显示卖家“d”的产品。我的想法是展示两个卖家或更多卖家的产品。以上是关于我怎样才能得到卖家的产品的主要内容,如果未能解决你的问题,请参考以下文章