如何将ArrayList与Hashmap

时间:2016-10-27 14:59:45

标签: android eclipse

我想在ArrayList中获取String数据。我试图从OpenWeatherMap API检索预测数据(采用JSON格式)。   “我将数据存储在JSONObject中,然后将其存入字符串。现在我想借助ArrayList显示数据,但我无法在ArayList中检索数据。我使用LogCat调试代码,发现所有String都有数据但是ArrayList没有采集数据。“  任何人都可以告诉我我做错了.Below是我的OnpostExecute方法的代码。谢谢你的帮助。

protected void onPostExecute(String file_url) {

    String gradfix = city.replace("%20", " ");
    grad.setText(gradfix);
    pb.setVisibility(View.GONE);
    grad.setVisibility(View.VISIBLE);

    try {
        // Getting Array of Contacts
        JSONObject json2 = new JSONObject(file_url);
        JSONArray forecast = null;
        forecast = json2.getJSONArray("list");

        // looping through All Contacts
        for(int i = 0; i < forecast.length(); i++){

            JSONObject c = forecast.getJSONObject(i);
            String dt = c.getString("dt");          
            String day = c.getString("day");
            Log.e("day",day.toString());
            String min = c.getString("min");
            String max = c.getString("max");
            String pressure = c.getString("pressure");
            String humidity = c.getString("humidity");

            JSONArray weather = c.getJSONArray("weather");

            for(int index = 0; index < weather.length(); index++){
                JSONObject weatherObject = weather.getJSONObject(index);
                String clouds = weatherObject.getString("clouds");
                String speed = weatherObject.getString("speed");
                String deg = weatherObject.getString("deg");
            }

        }

        final ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
        for (HashMap<String, Object> map : list) {

            //HashMap<String, Object> map = new HashMap<String, Object>();
            //Log.e("list",pressure.toString());
            double srednja = Double.parseDouble(map.get("day").toString());
            double ssrednja2 = (double) Math.floor(srednja);
            srednja1.setText(format.format(ssrednja2)+"°F");
            tlak.setText(map.get("pressure").toString()+" hpa");
            tlak.setVisibility(View.VISIBLE);
            vlaznost.setText(map.get("humidity").toString()+" %");
            vlaznost.setVisibility(View.VISIBLE);
            vjetar.setText(map.get("speed").toString()+" m/s");
            vjetar.setVisibility(View.VISIBLE);
            String imgrestring = map.get("icon").toString();
            Bitmap slika = BitmapFactory.decodeResource(getResources(), getResources().getIdentifier("img"+imgrestring, "drawable", getPackageName()));
            img_mid.setImageBitmap(slika);
            Float stupnjevi = Float.valueOf(map.get("deg").toString());
            Log.d("jea", String.valueOf(stupnjevi));
            Bitmap bmpOriginal = BitmapFactory.decodeResource(context.getResources(), R.drawable.wind);
            Bitmap bmResult = Bitmap.createBitmap(bmpOriginal.getWidth(), bmpOriginal.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas tempCanvas = new Canvas(bmResult); 
            tempCanvas.rotate(stupnjevi, bmpOriginal.getWidth()/2, bmpOriginal.getHeight()/2);
            tempCanvas.drawBitmap(bmpOriginal, 0, 0, null);
            BitmapDrawable mDrawable = new BitmapDrawable(getResources(),bmResult);
            vjetar.setCompoundDrawablesWithIntrinsicBounds( null, null, mDrawable, null);
            stanje.setText(map.get("main").toString());
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

由于评论时间过长,我将把这个例子放在答案中:

示例:

JSONObject weatherObject;
String clouds;
String speed;
String deg;
String id;

MyWeatherObject myWeatherObject;

final ArrayList<HashMap<String, MyWeatherObject>> list = new ArrayList<HashMap<String, MyWeatherObject>>();
HashMap<String, MyWeatherObject> map;

for (int index = 0; index < weather.length(); index++) {
    weatherObject = weather.getJSONObject(index);
    clouds = weatherObject.getString("clouds");
    speed = weatherObject.getString("speed");
    deg = weatherObject.getString("deg");
    myWeatherObject = new MyWeatherObject();

    myWeatherObject.setClouds(clouds);
    myWeatherObject.setSpeed(speed);
    myWeatherObject.setDeg(deg);

    // some unique String/Integer/... which is kind of ID for weatherObject
    id = weatherObject.getString("id");

    map = new HashMap<String, MyWeatherObject>();

    map.put(id, myWeatherObject);

    // then, if you really want to put it in the array list, do it here
    list.add(map);
    // you can always store your data only in map, but then your map should not be initialized inside for loop
    // most likely you don't need an array list of the maps, but that I cannot see that from your example. 
    // Seems like you need only a hash map or an array list of pairs or an array list of MyWeatherObjects.

}

// your list is not empty anymore if your JSONArray/JSONObject is not empty
for (HashMap<String, MyWeatherObject> map : list) {
    // here you can reach your MyWeatherObject and there you have getClouds, getSpeed, getDeg...
}