2016-05-19 3 views
0

Я пытаюсь устранить мой код, который имеет массив в пределах массива, а затем я хочу, чтобы получить все значения ID внутриПопытка устранения неполадок в JSON с массивом в массиве

private TextView tvData; 
private ImageView imgtest; 
String ChampionName; 
String ChampionNameInLowerCase; 
String item2; 
String item3; 
String Booked; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    tvData = (TextView) findViewById(R.id.tvJsonItem); 
    imgtest = (ImageView) findViewById(R.id.imageView); 
    // http://api.champion.gg/champion/Ekko/ 

    new JSONTask().execute("http://api.champion.gg/champion/Ekko/"); 
} 


public class JSONTask extends AsyncTask<String, String, String> { 
    @Override 
    protected String doInBackground(String... params) { 
     HttpURLConnection connection = null; 
     BufferedReader reader = null; 



     try { 
      URL url = new URL(params[0]); 

      connection = (HttpURLConnection) url.openConnection(); 
      connection.connect(); 

      InputStream stream = connection.getInputStream(); 

      reader = new BufferedReader(new InputStreamReader(stream)); 

      StringBuffer buffer = new StringBuffer(); 

      String line = ""; 

      while ((line = reader.readLine()) != null) { 
       buffer.append(line); 
      } 

      String finalJson = buffer.toString(); 

      JSONArray jsonarray = new JSONArray(finalJson); 

      for (int i = 0; i < jsonarray.length(); i++) { 

       JSONObject finalObject = jsonarray.getJSONObject(i); 

       ChampionName = finalObject.getString("key"); 
       String role = finalObject.getString("role"); 
       String items = finalObject.getString("items"); 

       JSONObject ItemArray = new JSONObject(items); 
       item2 = ItemArray.getString("mostGames"); 
       JSONObject ItemArray2 = new JSONObject(item2); 
       item3 = ItemArray2.getString("items"); 

       JSONArray jsonarray2 = new JSONArray(item3); 

       for (int j=0;j<jsonarray2.length();j++) { 
        JSONObject finalObject2 = jsonarray.getJSONObject(j); 

        Booked = finalObject2.getString("id"); 
       } 

       return ChampionName + role + item3 + Booked; 
       } 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } finally { 
      if (connection != null) { 
       connection.disconnect(); 
      } 
      try { 
       if (reader != null) { 
        reader.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     tvData.setText(result); 

     ChampionNameInLowerCase = ChampionName.toLowerCase().replaceAll("'", "");; 

     int id = getResources().getIdentifier("com.example.kripzy.url:drawable/" + ChampionNameInLowerCase+"_square_0", null ,null); 
     imgtest.setImageResource(id); 




    } 

} 
} 

И вот более подробно код для вопроса - это раздел;

JSONArray jsonarray2 = new JSONArray(item3); 

       for (int j=0;j<jsonarray2.length();j++) { 
        JSONObject finalObject2 = jsonarray.getJSONObject(j); 

        Booked = finalObject2.getString("id"); 
       } 

       return ChampionName + role + item3 + Booked; 
       } 

Когда код непосредственно выше добавляется, он дает ошибку

org.json.JSONException: No value for id 

Когда я удалить этот небольшой фрагмент кода, код производит

enter image description here

+0

на то, что является ответной JSON вы пытаетесь разобрать ?? –

+0

вызов 'jsonObj.getInt (" id ")' вместо? – jayeshsolanki93

+0

Его в коде, но вот он - http://api.champion.gg/champion/Ekko/ – Kripzy

ответ

0

Проблема здесь Booked = finalObject2.getString("id"); использование Booked = finalObject2.getInt("id");

и, как вы можете использовать JSONObject finalObject2 = jsonarray.getJSONObject(jsonarray2.length()-1); вместо этого for (int j=0;j<jsonarray2.length();j++)

+0

Изменение его на целое число по-прежнему имеет тот же результат, текст не отображается – Kripzy

+0

попробуйте что-то @Julius Ada ответить 'JSONObject finalObject2 = jsonarray2.getJSONObject (jsonarray2.length() -1); ' – yohayco

+0

Здравствуйте, это действительно делает работу с infact, но возвращает только последнее значение id, например; http://i.imgur.com/QKpF8YQ.png – Kripzy

0

В течение -loop, где вы перебираете jsonarray2, вы получаете доступ к jsonarray вместо jsonarray2, чтобы получить JSONObject.

Смежные вопросы