2016-10-27 2 views
0

Я хочу взять данные String в ArrayList. Я попытался получить данные прогноза (который находится в формате JSON) из API OpenWeatherMap. «Я сохранил данные в JSONObject, а затем возьму его в строке. Теперь я хочу показать данные с помощью ArrayList, но я не могу извлечь данные в ArayList. У меня был код отладки с LogCat и я обнаружил, что все данные String имеют данные но ArrayList не берет данные ». Может кто-нибудь сказать мне, где я делаю wrong.Below мой код метода OnpostExecute. Спасибо за любую помощь.Как использовать ArrayList с Hashmap

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(); 
    } 
} 
+3

'для (HashMap карта: список) {' вы повторяете список, который вы только что создали. он пуст. что еще вы ожидали? – njzk2

+0

Лучшим вариантом будет десериализация данных JSON в некоторый пользовательский класс Java. Или, в своем текущем подходе, вы можете делать то, что вам нужно внутри цикла weather.length(), потому что здесь вы перебираете фактический объект информации о погоде. – ishmaelMakitla

+0

Ваш 'ArrayList > list' пуст, только инициализирован, поэтому вы никогда не войдете в цикл for. – Drez

ответ

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... 
} 
Смежные вопросы