我正在编写一个简单的android应用程序,将CAD转换为美元,它可以正常工作,但是我始终使用相同的汇率,所以我想自动从互联网上获得汇率,该怎么办?
这是我的代码:
public void currencyChange (View view){
double usd = 0;
String value;
DecimalFormat finalUSD = new DecimalFormat("0.00");//To print just 2 decimals numbers
Log.i("info","Button pressed");
EditText cad = (EditText) findViewById(R.id.DollarEditText);
value = cad.getText().toString();//Converting the value to string
Log.i("amount in CAD ", cad.getText().toString());
usd = Double.valueOf(value).doubleValue();
usd = usd * 0.76; // **** RATE ****
Log.i("amount in USD ", Double.toString(usd));
Toast.makeText(this,value + " CAD" + " => " + finalUSD.format(usd) + " USD",Toast.LENGTH_LONG).show();}
感谢您的帮助!
答案 0 :(得分:0)
Fixer是一个不错的选择,它的免费注册将您限制为每月1000次呼叫和每小时新数据。注册后,您将获得一个访问密钥,然后可以在以下请求中使用它:
https://data.fixer.io/api/latest?access_key=MY_ACCESS_KEY
响应将采用以下格式:
{
"success": true,
"timestamp": 1547937308,
"base": "EUR",
"date": "2019-01-19",
"rates": {
"AED": 4.177162,
"AFN": 85.692162,
...
"CAD": 1.507594,
...
"USD": 1.137249,
...
}
}
现在您有了CAD / EUR(EUR是固定汇率的基本货币)和USD / EUR的汇率。通过链接这些汇率,您可以获得所需的CAD / USD汇率。
usd_cad_rate = eur_cad_rate / eur_usd_rate
usd_cad_rate = 1.507594 / 1.137249 = 1.325649
答案 1 :(得分:0)
您可以使用欧洲中央银行的每日汇率:https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html
请阅读免责声明,但他们在其网站上为开发人员提供了PHP示例。据我所知,除了将它们命名为source之外,没有其他限制。
String fxRates = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml";
URLConnection httpcon = new URL(fxRates).openConnection();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
Document doc = db.parse(httpcon.getInputStream());
NodeList cubes = doc.getElementsByTagName("Cube");
double fxEurCad = 0.0;
double fxEurUsd = 0.0;
for (int i = 0; i < cubes.getLength(); i++) {
Node cube = cubes.item(i);
Node currency = cube.getAttributes().getNamedItem("currency");
Node rate = cube.getAttributes().getNamedItem("rate");
if (null != currency && "CAD".equals(currency.getNodeValue())) {
fxEurCad = Double.parseDouble(rate.getNodeValue());
}
if (null != currency && "USD".equals(currency.getNodeValue())) {
fxEurUsd = Double.parseDouble(rate.getNodeValue());
}
}
double fxCadUsd = fxEurCad/fxEurUsd;