【问题标题】:How to retrieve data from database using hashmap?如何使用 hashmap 从数据库中检索数据?
【发布时间】:2021-12-31 10:51:01
【问题描述】:

我有这个recyclerview,当我点击一个项目时,我想从数据库中获取红色方块中的数据。

我想这样展示它

我就是这样保存的:

 Save.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD)
        @Override
        public void onClick(View v) {

            String refernce = TextRef.getEditText().getText().toString();
            String nompdv = textNomPdv.getEditText().getText().toString();
            String etat = textEtatCommande.getEditText().getText().toString();
            String datecommande = TextDateCommande.getEditText().getText().toString();
            String produitcommande = textProduit.getEditText().getText().toString();
            String qntcommande = editTextProduitQnt.getEditText().getText().toString();


            DatabaseReference newPost = reference.child(refernce);
            newPost.child("refernce").setValue(refernce);
            newPost.child("nompdv").setValue(nompdv);
            newPost.child("etat").setValue(etat);
            newPost.child("datecommande").setValue(datecommande);
            newPost.child("user_id").setValue(uid);
          
            Map<String, Object> values = new HashMap<>();
            values.put(produitcommande, qntcommande);

            DatabaseReference produitRef = reference.child(refernce).child("produit");
            produitRef.updateChildren(values);

这就是我从第一个活动(recyclerview)发送数据的方式:

v.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(view.getContext(), Order_detail.class);
            int pos = v.getAdapterPosition();
            if (pos != RecyclerView.NO_POSITION) {
                Order clickedDataItem = listArray.get(pos);

                intent.putExtra("nompdv", clickedDataItem.getNompdv());
                intent.putExtra("reference", clickedDataItem.getRefernce());
                intent.putExtra("datecommande", clickedDataItem.getDatecommande());
                intent.putExtra("etat", clickedDataItem.getEtat());
             }

            view.getContext().startActivity(intent);
        }
    });

在recyclerview点击商品时如何获取商品及其数量?

更新:这是我的订单类:

public class Order implements Serializable {
    public  String refernce, nompdv, etat, datecommande, produitcommande, qntcommande;
     String user_id;

    public Order(){}

    public Order(String refernce, String nompdv, String etat, String datecommande, String produitcommande, String qntcommande, String user_id) {
        this.refernce = refernce;
        this.nompdv = nompdv;
        this.etat = etat;
        this.datecommande = datecommande;
        this.produitcommande = produitcommande;
        this.qntcommande = qntcommande;
        this.user_id = user_id;

    }

    public String getRefernce() {
        return refernce;
    }

    public void setRefernce(String refernce) {
        this.refernce = refernce;
    }

    public String getNompdv() {
        return nompdv;
    }

    public void setNompdv(String nompdv) {
        this.nompdv = nompdv;
    }

    public String getEtat() {
        return etat;
    }

    public void setEtat(String etat) {
        this.etat = etat;
    }

    public String getDatecommande() {
        return datecommande;
    }

    public void setDatecommande(String datecommande) {
        this.datecommande = datecommande;
    }

    public String getProduitcommande() {
        return produitcommande;
    }

    public void setProduitcommande(String produitcommande) {
        this.produitcommande = produitcommande;
    }

    public String getQntcommande() {
        return qntcommande;
    }

    public void setQntcommande(String qntcommande) {
        this.qntcommande = qntcommande;
    }

    public String getUser_id() {
        return user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

}

The form我如何保存数据

更新 2:

这是recyclerview的适配器:

public class CommandeAdapter extends 
RecyclerView.Adapter<CommandeAdapter.CommandeViewHolder> {
List<Order> listArray;

public CommandeAdapter(List<Order> List) {
    this.listArray = List;
}

@NonNull
@Override
public CommandeAdapter.CommandeViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.commande_model, parent, false);

    return new CommandeViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull @NotNull CommandeAdapter.CommandeViewHolder holder, int position) {

    CommandeViewHolder v = (CommandeViewHolder) holder;
    final Order dataa = listArray.get(position);
    v.nom_pdv.setText(dataa.getNompdv());
    v.date.setText(dataa.getDatecommande());
    v.etat.setText(dataa.getEtat());

    v.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(view.getContext(), Order_detail.class);
            int pos = v.getAdapterPosition();
            if (pos != RecyclerView.NO_POSITION) {
                Order clickedDataItem = listArray.get(pos);

                intent.putExtra("nompdv", clickedDataItem.getNompdv());
                intent.putExtra("reference", clickedDataItem.getRefernce());
                intent.putExtra("datecommande", clickedDataItem.getDatecommande());
                intent.putExtra("etat", clickedDataItem.getEtat());
                
                }
             }

            view.getContext().startActivity(intent);
        }
    });
  }

public class CommandeViewHolder extends RecyclerView.ViewHolder {
    TextView nom_pdv, date, etat;

    public CommandeViewHolder(@NonNull @NotNull View itemView) {
        super(itemView);

        nom_pdv = itemView.findViewById(R.id.namepdv);
        date = itemView.findViewById(R.id.dateliv);
        etat = itemView.findViewById(R.id.etat);
     }
}

@Override
public int getItemCount() {
    return listArray.size();
}}

这是活动详情:

public class Order_detail extends AppCompatActivity {

TextView namepdv, refcommande, datecommande, etat, produitcmnd, qnt;

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

    namepdv = findViewById(R.id.nompdv);
    refcommande = findViewById(R.id.refcommande);
    datecommande = findViewById(R.id.datecommande);
    etat = findViewById(R.id.etatcommande);
     //  --------------------- //
    namepdv.setText(getIntent().getStringExtra("nompdv"));
    refcommande.setText(getIntent().getStringExtra("reference"));
    datecommande.setText(getIntent().getStringExtra("datecommande"));
    etat.setText(getIntent().getStringExtra("etat"));
 }}

【问题讨论】:

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


    【解决方案1】:

    根据您的问题,我假设 produit 下的 keys 是随机的。 因此,当您检索订单详细信息时,produit 将是一个 Hashmap。在 Order 类中将 produit 声明为 Hashmap

    您可以打印这些键和值。

    for(Map.Entry<String, String> e : clickedDataItem.getproduit().entrySet()) {
          
          //  print  e.getKey() e.getValue()
        }
    

    【讨论】:

    • 我通过添加我如何添加数据的表单以及我的 Order 类 (produitcommande) 和 (qntcommande) 来更新帖子(对于“D3”和“50”)
    • @MohamedYacineZouaoui 但是单个produitcommande里面会有多个值
    • 是的,我该如何解决?
    • @MohamedYacineZouaoui 将 produitcommande 声明为 Hashmap,而不是 String。
    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 2019-05-30
    • 2020-08-03
    • 1970-01-01
    • 2018-09-04
    • 2015-08-04
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多