Android - 计算webservice收到的平均信息

时间:2016-05-03 17:36:45

标签: android json

我必须从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中的代码完美无缺。

2 个答案:

答案 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;
}