2016-12-18 4 views
0

この質問は愚かかもしれませんが、私はこれを達成することができません。私は私のアプリにブルートゥースを介して接続されている支払いデバイスがあります。デバイスは、通貨コードを表示するために、私はこのように、文字列を渡す必要があります。文字列をマップして別の文字列と比較するにはどうすればよいですか?

String codeForPaymendDevice = "978"; 

この「978」基本的に送信し、「EUR」通貨コードとディスプレイを決済デバイスの画面上に。 (デバイスのライブラリがこれをマップして処理します)。私のアプリでは、ユーザーがEUR通貨で購入した場合、「978(EUR)」と比較し、両方が一致すればcodeForPaymentDeviceを解析する必要があります。私は978と "EUR"を比較することができないので、私はこれを行うことができません(私のコードは978がEURであることを知らないので、支払い装置だけが978をEURと知っています)。

私がする必要があるのは、 "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; 
    } 

答えて

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())); 
関連する問題