我必须从http://ghelfer.net/weather.aspx?output=json计算平均天气信息(温度,湿度,露点和压力)。 使用JSONArray接收它,计算并显示屏幕上的每个平均值。我不知道如何使用分离的信息填充数组(数组为温度,除湿度外,其他为露点,另一个为压力)。 我该怎么做?
编辑------(这是我试过的)
JSONObject res = new JSONObject(result);
JSONArray array1 = res.getJSONArray("temperature");
for (int i = 0; i<array1.length();i++){
float add = 0;
add += Integer.parseInt(array1[i], array1.length());
}
Edit2 --------
public void onClickWheater(View view){
new HttpAsyncTask().execute(opa);
}
class HttpAsyncTask extends AsyncTask<String, Void, String> {
ProgressDialog dialog;
@Override
protected String doInBackground(String... params) {
if(params.equals(opa)){
try {
HttpGet get = new HttpGet("http://ghelfer.net/weather.aspx?output=json");
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(get);
int status = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
return data;
} catch (IOException e) {
e.printStackTrace();
}
} else {
try {
HttpGet get = new HttpGet("https://viacep.com.br/ws/" + params[0] + "/json/");
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(get);
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
return data;
}
} catch (Exception e) {
return null;
}
}
return null;
}
Else中的代码完美无缺。
答案 0 :(得分:0)
使用Gson将json解析为模型类创建模型后创建单独的ArrayList,如下所示
WheatherModel model = new WheatherModel();
model=(WheatherModel)response; //after parsing json to model class
for i=0; i<model.size();i++)
{
ArrayList<String> humidity = new ArrayList<>();
humidity.add(model.getHumidity());
}
答案 1 :(得分:0)
如果您要计算平均值,则不需要保存单独的列表,只需累积所需的数据即可。但是,首先,您必须正确解析它。
res.getJSONArray("temperature");
不正确。如果查看JSON数据,则"weather"
是数组的名称。 array1[i]
因为JSONArray
无法编入索引而无法编译float add = 0
会为数组中的每个对象重置计数器Integer.parseInt(String s, int radix)
不适用于您提供的参数这是你应该做的事情。
double avgTemp = 0.0;
double avgHumid = 0.0;
double tempSum = 0.0;
double humidSum = 0.0;
JSONObject json = new JSONObject(response);
JSONArray weather = json.getJSONArray("weather");
int dataLength = weather.length();
for (int i = 0; i < dataLength; i++) {
JSONObject tempObj = weather.getJSONObject(i);
tempSum += tempObj.getDouble("temperature");
humidSum += tempObj.getDouble("humidity");
}
if (dataLength != 0) {
avgTemp = tempSum/dataLength;
avgHumid = humidSum/dataLength;
}