我有办法获取所有字符串并将其转换为双精度并添加所有字符串吗?

最后发布: 2019-05-22 20:17:00


问题

错误

我仍然是Firebase的新手,我想在这张图片中用蓝线问一下Firebase 如何将它们变成双线,最后添加所有蓝线。 基本上,我想将所有价格相加并将其放在总价的文本视图中。`有人可以帮我这是我到目前为止完成的代码吗?

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


    mRecyclerView2 = findViewById(R.id.recyclerview3);
    mRecyclerView2.setHasFixedSize(true);
    mRecyclerView2.setLayoutManager(new LinearLayoutManager(this));

    mModel2 = new ArrayList<>();
    mAuth = FirebaseAuth.getInstance();
    FirebaseUser user = mAuth.getCurrentUser();
    String userID = user.getUid();
    mAdapter2 = new ViewHolder2(Payment.this, mModel2);
    mRecyclerView2.setAdapter(mAdapter2);
    mDatabaseReference2 = FirebaseDatabase.getInstance().getReference(userID).child("Ordered");
    mDatabaseReference2.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            double cost = 0;
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                Model2 model2 = postSnapshot.child("price").getValue(Model2.class);
                String venueLatString = String.valueOf(model2);
                double total = Double.parseDouble(venueLatString);

                cost = total + cost;
                String finaltotal = String.valueOf(cost);
                Total = findViewById(R.id.totalprice);
                Total.setText(finaltotal);

                mModel2.add(model2);
            }
            mAdapter2.notifyDataSetChanged();

        }

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

        }
    });


}

如果我运行代码,它将崩溃。 请帮忙。

java android firebase firebase-realtime-database
回答

您可以像这样自定义模型

public class test {
    String food;
    String order;
    String price;

    public test() {
    }

    public test(String food, String order, String price) {
        this.food = food;
        this.order = order;
        this.price = price;
    }

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public String getOrder() {
        return order;
    }

    public void setOrder(String order) {
        this.order = order;
    }

    public double getPrice() {
        double value = 0;
        try{
            value = Double.parseDouble(price);
        }
        catch (Exception e){
            value = 0;
        }
        return value;
    }

    public void setPrice(String price) {
        this.price = price;
    }
}

现在您可以使用getPrice直接获取双倍价值

并在您的适配器中

            Test model2 = postSnapshot.getValue(Test.class);

并获得双倍价值

model2.getPrice


回答

之所以收到该错误,是因为您以错误的方式使用以下代码行:

Model2 model2 = postSnapshot.child("price").getValue(Model2.class);

price包含一个String而不是 Model2对象,因此这就是该错误的原因。

为了解决这个问题,请从上面的代码行中删除对.child("price")的调用:

Model2 model2 = postSnapshot.getValue(Model2.class);

现在,要获得双倍价格,请使用以下代码行:

String stringValue = model2.getPrice();
double price = Double.parseDouble(stringValue);

price double ,就可以执行所需的任何操作。