【问题标题】:JSONException: No value for photoJSONException:照片没有价值
【发布时间】:2017-09-16 21:42:28
【问题描述】:

我正在使用 Flickr API 让我的应用根据用户搜索显示图像。我不断收到此错误:JSONException: No value for photo

获取照片的调用:

public ArrayList<Category> processResults(Response response) {
    ArrayList<Category> categories = new ArrayList<>();

    try {
        String jsonData = response.body().string();
        if (response.isSuccessful()) {
            JSONObject flickrJSON = new JSONObject(jsonData);
            //json data
            JSONArray photoJSON = flickrJSON.getJSONArray("photo");
        }
    }
}

json格式是这样的:

{
    photos: { page: 1, 
              pages: 2165, 
              perpage: 100, 
              total: "216413", 
              photo: [ { id: "37095719122",
              ....
    }
}

【问题讨论】:

  • json 格式是这样的照片:{ page: 1, pages: 2165, perpage: 100, total: "216413", photo: [ { id: "37095719122",
  • 因为new JSONObject() 接受字符串,我猜它是一个有效的JSON 对象,在这种情况下,字符串应该以{ 开头,而不是photos

标签: java android api flickr


【解决方案1】:

由于您的代码的 new JSONObject() 部分工作正常,因此可以安全地假设您获得的 JSON 对象是有效的,在这种情况下,您的实际 JSON 对象必须如下所示:

{
    photos: { page: 1, 
              pages: 2165, 
              perpage: 100, 
              total: "216413", 
              photo: [ { id: "37095719122",
              .....
    }
}

变量flickerJSON 将包含整个对象,它拥有的唯一字段是photos,而您尝试访问的photo 字段是photos 对象的内部字段。

因此,您可以像这样访问photo 字段:

JSONArray photoJSON = flickrJSON.getJSONObject("photos").getJSONArray("photo");

【讨论】:

  • 谢谢你这工作。但是,我的应用程序现在显示的是 imageUrl 而不是实际图像。关于如何解决这个问题的任何想法,对不起,我是 Android 新手
  • 您需要使用该 URL 下载该图像。此外,由于这将是一个完全不同的主题,您可能希望将此答案标记为已接受。
猜你喜欢
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 2020-04-19
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多