在添加到构造函数

时间:2017-07-11 11:10:06

标签: java android json

我循环遍历我的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;
}

10 个答案:

答案 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();
        }