По мере того как я углубляюсь в Android, я перешел к JSON и загрузился в RecyclerView. Теперь он работает нормально, за исключением того, сколько он будет загружен принудительно. В настоящее время я загружаю 40 элементов, которые есть на моем веб-сайте. Теперь, если я пойду и создам новое сообщение на веб-сайте, я получу сообщение об ошибке в моем приложении, потому что оно не соответствует тому, сколько я объявил в моем цикле FOR.
Мой вопрос: как мне сделать так, чтобы цикл не приводил к определенному количеству результатов, а просто захватил их все?
private void parsejson(String response) {
List<DataMembers> data = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(response);
for(int i=0;i<40;++i) {
DataMembers dataMembers = new DataMembers();
JSONObject jsonObject = new JSONObject();
jsonObject = (JSONObject) jsonArray.get(i);
Log.i("Imported: ", Integer.toString(jsonObject.getInt("id")));
JSONObject jsonObject1 = new JSONObject();
JSONObject jsonObject2 = new JSONObject();
JSONObject jsonObject3 = new JSONObject();
JSONObject jsonObject4 = new JSONObject();
jsonObject1 = (JSONObject) jsonObject.get("title");
jsonObject3 = (JSONObject) jsonObject.get("excerpt");
jsonObject4 = (JSONObject) jsonObject.get("better_featured_image");
jsonObject2 = (JSONObject) jsonObject.get("content");
dataMembers.postTitle = jsonObject1.getString("rendered");
dataMembers.postCode = jsonObject2.getString("rendered");
dataMembers.postExcerpt = jsonObject3.getString("rendered");
dataMembers.imgurl = jsonObject4.getString("source_url");
dataMembers.postId = jsonObject.getInt("id");
temp[i] = dataMembers.postCode;
dataMembers.posturl = jsonObject.getString("link");
data.add(dataMembers);
}
rview.setAdapter(new RecyclerAdapter(RestActivity.this,data));
}
catch (Exception e) {
e.printStackTrace();
}
}
Используйте JsonArray.length ()
JsonArray.length () дает размер или количество JsonArray.
int length = jsonArray.length();
private void parsejson(String response) {
List<DataMembers> data = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(response);
for(int i=0;i< jsonArray.length();++i)
{
DataMembers dataMembers = new DataMembers();
// The rest of the code goes here
} // End for
} // End Try
} // End method parsejson
Вот каким должен быть ваш код
try {
JSONArray jsonArray = new JSONArray(response);
for(int i=0; i<jsonArray.length(); ++i) {
DataMembers dataMembers = new DataMembers();
JSONObject members = jsonArray.getJSONObject(i);
Log.i("Imported: ", Integer.toString(members.getInt("id")));
JSONObject title = members.getJSONObject("title");
JSONObject exercpt = members.getJSONObject("excerpt");
JSONObject image = members.getJSONObject("better_featured_image");
JSONObject content = members.getJSONObject("content");
dataMembers.postTitle = title.getString("rendered");
dataMembers.postCode = content.getString("rendered");
dataMembers.postExcerpt = exercpt.getString("rendered");
dataMembers.imgurl = image.getString("source_url");
dataMembers.postId = members.getInt("id");
temp[i] = dataMembers.postCode;
dataMembers.posturl = members.getString("link");
data.add(dataMembers);
}
rview.setAdapter(new RecyclerAdapter(RestActivity.this,data));
}
catch (Exception e) {
e.printStackTrace();
}
Используйте длину JSONArray вместо жестко запрограммированного числа. Также не делайте таких вещей, как
JSONObject jsonObject1 = new JSONObject();
jsonObject1 = (JSONObject) jsonObject.get("title");
Он создает совершенно ненужный объект с new JSONObject(), а затем выбрасывает его. Также прекратите использовать get и после этого транслировать на JSONObject. Вместо этого объявите переменную, когда вы действительно хотите присвоить ей значение, и используйте getJSONObject. Также дайте вашим переменным осмысленные имена.
JSONObject title = members.getJSONObject("title");
Я думаю, что Jdk 8 может помочь ... плюс немного синтаксического сахара.
Итерируйте через JSONArray, передавая функцию для каждого объекта ... Таким образом, вам не нужно количество / длину.
JSONArray jsonArray = new JSONArray(response);
try {
jsonArray.forEach(obj -> { //looping through the Array
//All other things goes here...
});
} catch (JSONException j) {
log.e("JSON 'PUFF' EXCEPTION", j.getMessage());
}
Не зацикливайтесь на количестве элементов массива как 40, вместо этого выясните это из доступного apis JSONArray (длина)