这个问题可能很愚蠢,但我无法做到这一点。我有一个支付设备,我通过蓝牙连接到我的应用程序。要让设备显示货币代码,我需要传递一个字符串,如下所示:
String codeForPaymendDevice = "978";
这" 978"基本上发送" EUR"货币代码并显示在支付设备的屏幕上。 (设备的库映射并处理此问题)。在我的应用中,当用户以欧元货币进行购买时,应与" 978(EUR)"如果两者都匹配,它应该解析codeForPaymentDevice。我无法做到这一点,因为我无法比较" EUR" 978(因为我的代码并不知道978是欧元,只有支付设备知道978是欧元)。
我需要做的是,映射" 978"到" EUR"代码,然后将transaction.getCurrencyCode()
与映射变量进行比较,然后解析它。
private SaleRequest buildTransactionRequest(Transaction transaction) {
final SaleRequest tr = new SaleRequest();
BigDecimal amount = getAmountPaid();
String codeForPaymentDevice = "978";
String formattedAmount;
try {
if (!transaction.getCurrencyCode().equalsIgnoreCase(CREW_CURRENCY)) {
formattedAmount = AirFiApplication
.getPriceFormatter(AirFiApplication.getCurrency(transaction.getCurrencyCode())).format(amount);
// transaction.getCurrencyCode = EUR
tr.setCurrency(codeForPaymentDevice); // TODO remove hardcoding
}
} catch (MPosValueException e) {
LOG.error("Error while building transaction request due to {}", e.getLocalizedMessage());
}
return tr;
}
答案 0 :(得分:1)
您可以创建一个Map
,其中包含一些密钥(现在我已经使用过货币代码),并且您需要将值作为值传递。
Map<String, String> map = new HashMap<>();
map.put("EUR", "978");
map.put("INR", "979");
map.put("USD", "980");
map.put("AED", "981");
...
在您的代码中,
tr.setCurrency(map.get(transaction.getCurrencyCode()));