尝试使用数组中的数组对JSON进行故障排除

时间:2016-05-19 09:51:06

标签: java android arrays json

我正在尝试对我的代码进行故障排除,该代码在数组中有一个数组,然后我想检索其中的所有ID值

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

2 个答案:

答案 0 :(得分:0)

在遍历jsonarray2的for循环中,访问jsonarray而不是jsonarray2来获取JSONObject。

答案 1 :(得分:0)

问题出在Booked = finalObject2.getString("id");使用Booked = finalObject2.getInt("id");

以及您可以使用的方式 JSONObject finalObject2 = jsonarray.getJSONObject(jsonarray2.length()-1);代替for (int j=0;j<jsonarray2.length();j++)