我想从本网站获取所有货币汇率并在我的应用程序中处理它。 这是网站:https://raw.github.com/currencybot/open-exchange-rates/master/latest.json按照顺序下载带有JSON的Web页面?
我使用这个类来获得所有的货币汇率,但问题是,它得到它,因为迭代器键= ratesObj.key的随机顺序();
我该如何解决这个问题,以便它获得所有的汇率?
这是代码:
private class DownloadWebPageTask extends AsyncTask<String, Void, ArrayList<Double>>
{
protected ArrayList<Double> doInBackground(String... urls)
{
ArrayList<Double> response = new ArrayList<Double>();
for (String url : urls)
{
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try
{
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
InputStreamReader isr = new InputStreamReader(content);
StringBuilder sb = new StringBuilder();
char[] buffer = new char[1024];
while (isr.read(buffer) != -1)
{
sb.append(buffer);
}
JSONObject jobj = new JSONObject(sb.toString());
JSONObject ratesObj = jobj.getJSONObject("rates");
Iterator<String> keys = ratesObj.keys();
while (keys.hasNext())
{
response.add(Double.parseDouble(ratesObj.getString(keys.next())));
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
@Override
protected void onPostExecute(ArrayList<Double> result)
{
currency_values = result;
}
}
谢谢大家的帮助!对此,我真的非常感激。
UPDATE:这是现在的代码。
try
{
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
String s = EntityUtils.toString(execute.getEntity());
JSONObject jobj = new JSONObject(s);
JSONObject ratesObj = jobj.getJSONObject("rates");
Iterator<String> keys = ratesObj.keys();
while (keys.hasNext())
{
response.add(Double.parseDouble(ratesObj.getString(keys.next())));
}
} catch (Exception e) {
e.printStackTrace();
}
别当存在服从服务器设置的内容编码的EntityUtils.toString(execute.getEntity())时,使用'InputStreamReader'和'StringBuilder'代码少得多,并且具有适当的错误处理。 – 2012-04-22 18:47:25
然后这会改变它下面的循环。那么我将如何修复循环呢? – sameetandpotatoes 2012-04-22 18:49:49
如果你的意思是'while(isr.read(buffer)!= -1)'循环,它不会被改变 - 你会完全删除它,因为如果你使用EntityUtils.toString() 。 – 2012-04-22 18:51:28