我循环遍历我的JSONobject并提取值将它们放入数组的构造函数中。它工作正常,但在第二个循环中,下一个对象的“描述”为空值并导致错误,org.json.JSONException: No value for description
我认为导致代码退出循环,并且不再创建ArrayList条目因此我只看到一个结果。我尝试使用if块来检查.lenth(),isEmpty(),并将String设置为另一个值,但它不起作用。这是一段代码片段。
public static ArrayList<Books> extractBooks(String jsonString) {
ArrayList<Books> books = new ArrayList<>();
String emptyDescription = null;
try {
JSONObject baseJsonObject = new JSONObject(jsonString);
JSONArray jsonArray = baseJsonObject.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i ++) {
JSONObject currentBook = jsonArray.getJSONObject(i);
JSONObject items = currentBook.getJSONObject("volumeInfo");
JSONObject imageLinks = items.getJSONObject("imageLinks");
String title = items.getString("title");
String author = items.getString("authors");
String published = items.getString("publishedDate");
//Todo: fix null description string if no desc available
String description = items.getString("description");
if (description.equals("{}")){
description = "No info.";
Log.e(LOG_TAG, "if desc block: " + description);
}
String image = imageLinks.getString("smallThumbnail");
Bitmap bitmap = extractImages(image);
Books book = new Books(title, author, bitmap, published, description);
books.add(book);
}
} catch (JSONException e) {
Log.e(LOG_TAG, "Problem parsing JSON book results", e);
}
return books;
}
答案 0 :(得分:0)
添加一个try catch块,如下所示:
String description = "";
try {
description = items.getString("description");
}catch(JSONException e){
}
答案 1 :(得分:0)
使用isNull进行检查
json.isNull( "fieldName" )
答案 2 :(得分:0)
org.json.JSONException:没有描述值
您应该检查 Json has 。的 boolean has (String name)
强>
如果此对象具有name的映射,则返回true。 NULL
if (items.has("description"))
{
String description= items.getString("description"));
}
答案 3 :(得分:0)
您还可以检查您的JSONObject是否具有给定的密钥https://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)
答案 4 :(得分:0)
您可以使用.has(String name)方法检查它是否具有该值。
另请考虑了解Gson或任何其他JSON转换器。
答案 5 :(得分:0)
您可以使用boolean has(String key)
来测试对象是否具有特定键,或使用其中一个始终返回默认值而不是抛出异常的opt
方法。 E.g。
String description = items.optString("description", "");
答案 6 :(得分:0)
如果第二个循环的key
没有description
。那么你必须检查如下
if (items.has("description")){
// get your description key data here
}
答案 7 :(得分:0)
你可以发布你的回复,看起来描述的值是空的,或者没有描述的关键
要检查它,您只需添加
即可String description = items.optString("description");
然后你可以检查说明是空还是空
if(description ==null||description.equals("")){
description ="";
}else{
}
答案 8 :(得分:0)
检查null或清空两者的最佳方法是使用textUtil java class
String descriptionVariable ="";
if(!TextUtils.isEmpty(description )){
descriptionVariable = items.getString("description");
}
答案 9 :(得分:0)
您可以检查从Web服务器
收到的JSONObject JSONObject baseJsonObject = new JSONObject(jsonString);
try {
if(baseJsonObject!=null){
JSONArray jsonArray = baseJsonObject.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject currentBook = jsonArray.getJSONObject(i);
if (currentBook.has("description")) {
String description = json.getString("description"));
}
}
}else{
//Server is Uncharable
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}