Все работало нормально, пока я не добавил вторую валюту. Я написал код, который работал, когда флажок элемента отмечен, его цена добавляется в пожарный магазин (и, если существует какое-либо другое значение, они добавляются друг с другом).
Это код, который я использовал, и он работал:
holder.cartCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
final int adapterPosition = holder.getAdapterPosition();
if (firebaseUser != null) {
userID = firebaseUser.getUid();
if (!itemStateArray.get(adapterPosition, false)) {
holder.cartCheckBox.setChecked(true);
itemStateArray.put(adapterPosition, true);
priceUSDCallBack.priceUSDListenerMethod(priceUSD);
priceLBPCallBack.priceLBPListenerMethod(priceLBP);
checkPrice(priceUSD, priceLBP);
} else {
holder.cartCheckBox.setChecked(false);
itemStateArray.put(adapterPosition, false);
priceUSDCallBack.priceUSDListenerMethod(priceUSD);
priceLBPCallBack.priceLBPListenerMethod(priceLBP);
checkPrice(priceUSD, priceLBP);
ordersDocument.delete();
}
}
}
});
И метод checkPrice:
private void checkPrice(final String priceUSD, final String priceLBP) {
final DocumentReference priceDocument = firebaseFirestore.collection("Shopping Cart").document(userID).collection("Total Amount").document("Price");
priceDocument.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot documentSnapshot = task.getResult();
if (documentSnapshot.exists()) {
String oldPriceUSD = task.getResult().getString("price_usd");
String oldPriceLBP = task.getResult().getString("price_lbp");
int priceIntegerUSD = Integer.parseInt(priceUSD) + Integer.parseInt(oldPriceUSD);
int priceIntegerLBP = Integer.parseInt(priceLBP) + Integer.parseInt(oldPriceLBP);
String finalPriceUSD = Integer.toString(priceIntegerUSD);
String finalPriceLBP = Integer.toString(priceIntegerLBP);
priceUSDCallBack.priceUSDListenerMethod(finalPriceUSD);
priceLBPCallBack.priceLBPListenerMethod(finalPriceLBP);
Map<String, Object> priceMap = new HashMap<>();
priceMap.put("price_usd", finalPriceUSD);
priceMap.put("price_lbp", finalPriceLBP);
priceDocument.set(priceMap);
} else {
String oldPriceUSD = task.getResult().getString("price_usd");
String oldPriceLBP = task.getResult().getString("price_lbp");
int priceIntegerUSD = Integer.parseInt(oldPriceUSD) - Integer.parseInt(priceUSD);
int priceIntegerLBP = Integer.parseInt(oldPriceLBP) - Integer.parseInt(priceLBP);
String finalPriceUSD = Integer.toString(priceIntegerUSD);
String finalPriceLBP = Integer.toString(priceIntegerLBP);
priceUSDCallBack.priceUSDListenerMethod(finalPriceUSD);
priceLBPCallBack.priceLBPListenerMethod(finalPriceLBP);
Map<String, Object> priceMap = new HashMap<>();
priceMap.put("price_usd", finalPriceUSD);
priceMap.put("price_lbp", finalPriceLBP);
priceDocument.set(priceMap);
}
}
}
});
Эта часть кода работала нормально, когда я использовал только одну валюту, пока не добавил другую валюту.
Я получаю эту ошибку в LogCat:
0:38:08.611 15213-15213/ga.jayp.tlos E/AndroidRuntime: FATAL EXCEPTION: main
Process: ga.jayp.tlos, PID: 15213
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:483)
at java.lang.Integer.parseInt(Integer.java:556)
at ga.jayp.tlos.CartRecyclerAdapter$2.onComplete(CartRecyclerAdapter.java:264)
at com.google.android.gms.tasks.zzj.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6126)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
И щелчок по этому ga.jayp.tlos.CartRecyclerAdapter$2.onComplete(CartRecyclerAdapter.java:264)
отправляет курсор на этот int priceIntegerUSD = Integer.parseInt(oldPriceUSD) - Integer.parseInt(priceUSD);
. Или это дает мне что-то вроде Для входной строки: "8.08" и цена товара в долларах США, считанная из пожарного магазина.
Кто-нибудь знает, в чем проблема? И любая помощь, пожалуйста, будет оценена.
РЕДАКТИРОВАТЬ: Я думаю, я нашел ошибку: если значение в firestore является десятичным, я получаю эту ошибку. Иначе, если число натуральное, ошибки нет.