当前位置: 首页 > 知识库问答 >
问题:

将适配器类中的计算函数调用到java类中。

郎翔
2023-03-14

我有购物车活动,用户可以在其中添加,更新和删除他们的购物车。每个函数都有它拥有java活动,我也有CartAdapter活动。我想执行一个计算,该计算可以在 ViewCart 活动中显示客户项目的总价。我在购物车适配器上进行了计算,但是在ViewCart活动中显示总价格时遇到问题。

我得到的错误是

java.lang.数字格式异常:对于输入字符串:"99.00"在java.lang.Integer.parseInt(Integer.java:615)在java.lang.Integer.value(Integer.java:801)在com.example.g.Customer.CartAdapter.onBindViewHolder(CartAdapter.java:68)在com.example.g.Customer.CartAdapter.onBindViewHolder(CartAdapter.java:28)

这是我的< code>CartAdapter


   public class CartAdapter extends RecyclerView.Adapter<CartAdapter.MyViewHolder> {
    private Context context;


    List<String> key;


    ArrayList<Cart> CartList;

    int totalPrice = 0;
    int totalPrice1 = 0;


    public CartAdapter(ArrayList<Cart> CartListList) {
        this.CartList = CartListList;

    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cust_view_cart, viewGroup, false);

        context = viewGroup.getContext();
        return new CartAdapter.MyViewHolder(view);
    }


    @NonNull
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {

        Picasso.with(context).load(CartList.get(i).getPro_image()).into(myViewHolder.image);
        myViewHolder.name.setText(CartList.get(i).getPro_name());
        myViewHolder.category.setText(CartList.get(i).getPro_category());
        myViewHolder.price.setText(CartList.get(i).getPro_price());
        myViewHolder.size.setText(CartList.get(i).getSize());
        myViewHolder.quantity.setText(CartList.get(i).getQuantity());


        totalPrice1 = (int)Double.parseDouble((CartList.get(i).getPro_price())) * Integer.valueOf(CartList.get(i).getQuantity());
        totalPrice = totalPrice + totalPrice1;




        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String cart_id = CartList.get(i).getCart_id();
                String keyB = CartList.get(i).getBrand_id();
                String pid = CartList.get(i).getPro_id();
                String cust_id = CartList.get(i).getCust_id();
                String name = CartList.get(i).getPro_name();
                String category = CartList.get(i).getPro_category();
                String price = CartList.get(i).getPro_price();
                String image = CartList.get(i).getPro_image();
                String size = CartList.get(i).getSize();
                String quantity = CartList.get(i).getQuantity();


                Intent intent = new Intent(context, UpdateCart.class);
                intent.putExtra("cust_id", cust_id);
                intent.putExtra("Cart_id", cart_id);
                intent.putExtra("keyB", keyB);
                intent.putExtra("pid", pid);
                intent.putExtra("pro_name", name);
                intent.putExtra("pro_category", category);
                intent.putExtra("pro_price", price);
                intent.putExtra("pro_image", image);
                intent.putExtra("size", size);
                intent.putExtra("quantity", quantity);
                context.startActivity(intent);
            }
        });


        myViewHolder.btnDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String pro_name = CartList.get(i).getPro_name();
                String cart_id = CartList.get(i).getCart_id();
                String cust_id = CartList.get(i).getCust_id();
                DatabaseReference dbCart = FirebaseDatabase.getInstance().getReference("Cart").child(cust_id);
                dbCart.child(cart_id).removeValue();

                //set url of image to storageref
                StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(CartList.get(i).getPro_image());
                // Delete the file
                storageReference.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        // File deleted successfully
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception exception) {
                        // Uh-oh, an error occurred!
                    }
                });

                //Toolbar
                // Remove the item on remove/button click
                CartList.remove(i);
                /*
                    Parameters
                        position : Position of the item that has now been removed
                */
                notifyItemRemoved(i);

                /*
                    Parameters
                        positionStart : Position of the first item that has changed
                        itemCount : Number of items that have changed
                */
                notifyItemRangeChanged(i, CartList.size());

                // Show the removed item label
                Toast.makeText(context, pro_name + " has been removed from your cart", Toast.LENGTH_SHORT).show();

            }
        });


    }

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

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView name, category, price, size, quantity;
        ImageView image, btnDelete;

        public MyViewHolder(View itemView) {
            super(itemView);

            name = itemView.findViewById(R.id.name);
            category = itemView.findViewById(R.id.category);
            image = itemView.findViewById(R.id.image);
            price = itemView.findViewById(R.id.price);
            size = itemView.findViewById(R.id.size);
            quantity = itemView.findViewById(R.id.quantity);
            btnDelete = itemView.findViewById(R.id.delete);


        }
    }
}


查看购物车


   public class ViewCart extends AppCompatActivity {

    FirebaseAuth firebaseAuth;
    DatabaseReference databaseReference;
    FirebaseUser currentUser;
    ArrayList<Cart> CartList;
    RecyclerView recyclerView;

    private int totalPrice = 0;
    TextView total;


    private String userID, cust_id;


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

        total = findViewById(R.id.total);

        total.setText( String.valueOf(totalPrice));

        firebaseAuth = FirebaseAuth.getInstance();
        currentUser = firebaseAuth.getCurrentUser();

        if (currentUser != null) {
            userID = currentUser.getUid();
            cust_id = firebaseAuth.getUid();
            databaseReference = FirebaseDatabase.getInstance().getReference("Cart").child(cust_id);
            recyclerView = findViewById(R.id.rv);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));

            databaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    CartList = new ArrayList<>();
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {

                        CartList.add(ds.getValue(Cart.class));
                    }

                    CartAdapter cartAdapter = new CartAdapter(CartList);
                    recyclerView.setAdapter(cartAdapter);

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
        } else
            openDialog();

    }

    private void openDialog() {

        LoginDialog loginlDialog = new LoginDialog();
        loginlDialog.show(getSupportFragmentManager(), "login dialog");

    }

共有2个答案

姜弘新
2023-03-14

为什么您将价格保留为String,而不是浮点数int

您可能已将价格保留为字符串,以便可以在 TextView 中显示它,但因此您每次都必须强制转换它。

您应该将价格保持为浮动,并在TextView中将其设置为文本,只需使用字符串连接

float price = 99.00;
textView.setText(value+ "");
姚煜
2023-03-14

用这个


   public class ViewCart extends AppCompatActivity {

    FirebaseAuth firebaseAuth;
    DatabaseReference databaseReference;
    FirebaseUser currentUser;
    ArrayList<Cart> CartList;
    RecyclerView recyclerView;

    private int totalPrice = 0;
    TextView total;


    private String userID, cust_id;


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

        total = findViewById(R.id.total);
        firebaseAuth = FirebaseAuth.getInstance();
        currentUser = firebaseAuth.getCurrentUser();

        if (currentUser != null) {
            userID = currentUser.getUid();
            cust_id = firebaseAuth.getUid();
            databaseReference = FirebaseDatabase.getInstance().getReference("Cart").child(cust_id);
            recyclerView = findViewById(R.id.rv);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));

            databaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    CartList = new ArrayList<>();
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {

                        CartList.add(ds.getValue(Cart.class));
                        Cart cart = ds.getValue(Cart.class);
                        totalPrice = totalPrice + (int)Double.parseDouble(cart.getPrice()) *  Integer.valueOf(cart.getQuantity());

                    }

                    CartAdapter cartAdapter = new CartAdapter(CartList);
                    recyclerView.setAdapter(cartAdapter);
                    total.setText( String.valueOf(totalPrice));

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
        } else
            openDialog();

    }

    private void openDialog() {

        LoginDialog loginlDialog = new LoginDialog();
        loginlDialog.show(getSupportFragmentManager(), "login dialog");

    }
 类似资料:
  • 问题内容: 我正在尝试创建一个将字段作为参数的构造函数,然后将其放入存储在超类中的字段中。这是我正在使用的代码 在超类中,我用 我有一个访问器方法 我收到一个错误“ 味道在超类中具有私有访问权 ”,但是我认为这无关紧要,因为我正在调用将其返回到字段的访问器方法? 问题答案: 您应该做什么: 在您的超类中添加一个构造函数: 在Crisps类中: 注释 对您的问题的一些评论: “在超类中,我已经用”

  • 问题内容: 我有这段代码可以计算两个坐标之间的距离。这两个函数都在同一类中。 但是,如何在函数中调用该函数? 问题答案: 由于这些是成员函数,因此在实例上将其称为成员函数self。

  • 但问题是我想知道如何从类中的片段调用方法?这是我的代码 下面是在活动中工作但在片段中不工作的代码

  • 问题内容: 我想在超类中实现,并通过在运行时在超类中的特定子类上调用类方法在所有子类中使用它。 MySuperClass 子类是否有可能在运行时访问类函数? 问题答案: 我想我明白了你的意思。您创建一个类,实现一个初始化程序和一个类(静态)函数: 接下来,您要创建子类,并让初始化程序调用该方法的重写版本。您只需要重写该方法即可: 现在,当您创建的实例时,显示的内容是: 这是预期的输出。 请注意,初

  • 问题内容: 我认为以下伪代码很好地总结了我的问题… 由(拥有)拥有(拥有适当的字词?)。那么对象类型将如何调用? 起初我在想,但这是针对继承的类的。然后我想通过一个接口,我走对了吗? 问题答案: 如果dostuff是常规方法,则需要将Bar传递给实例。 请注意,Bar可能有很多所有者,但没有任何现实的方法来确定他们是谁。 编辑:您可能正在寻找内部类:示例和注释。

  • 问题内容: 假设我们具有以下暂停功能: 如果要在我现有的Java类之一中调用此函数(暂时无法将其转换为Kotlin)并获取其返回值,则必须提供a 作为其参数(很明显)。 我的问题是,我该如何实施。特别是它的吸气剂。 问题答案: 首先,将模块添加到您的依赖项中。在您的Kotlin文件中,定义以下与Java编写异步API样式相对应的异步函数: 现在,以与在Java世界中使用其他异步API相同的方式在J