【问题标题】:Parsing Picasa API JSON Feed in android在android中解析Picasa API JSON Feed
【发布时间】:2012-06-16 11:34:11
【问题描述】:

您好,我正在尝试实现一个在 android 中显示 picasa 照片的简单应用程序。

经过多次试验,现在我使用 Google Java Api 客户端(不是 Gdata 客户端)来获取 Picasa 供稿。

在我的程序中,Feed中JSON的第一层字段(例如下面代码中的versionencoding)可以成功映射,所以feed和连接没有问题 但是我无法将第二层字段映射到对象中。

我使用albumFeed = response.parseAs(AlbumFeed.class); 这将调用解析器。

从官方示例中我有这个 AlbumFeed.java

    public class AlbumFeed {

      // cannot be List
      @Key
      List<AlbumEntry> feed;

      @Key
      String version;

      @Key
      String encoding;

}

List &lt;AlbumEntry&gt; feed ; 我会收到这个错误,说无法启动列表

06-16 14:35:10.789: E/AndroidRuntime(1129): Caused by: java.lang.IllegalArgumentException: unable to create new instance of class java.util.List because it is an interface and because it has no accessible default constructor

我改成了 ArrayList&lt;AlbumEntry&gt; feed 不会显示错误,但 ArrayList 将为空。谁能告诉我使用给定的 JsonObjectParser 将 JSON 映射到对象的正确方法?

如果有人能回答我的问题,非常感谢

更多代码

public class newApiActivity extends Activity {

  HttpTransport transport = AndroidHttp.newCompatibleTransport();
  static final JsonFactory JSON_FACTORY = new JacksonFactory();

  public static HttpRequestFactory createRequestFactory(HttpTransport transport) {
    return transport.createRequestFactory(new HttpRequestInitializer() {
      public void initialize(HttpRequest request) {

        // final JsonCParser jsoncparser = new JsonCParser(JSON_FACTORY);

        request.setParser(new JsonObjectParser(GSON_FACTORY));
        // request.setParser(jsoncparser);



        GoogleHeaders headers = new GoogleHeaders();
        headers.setApplicationName("APOD/1.0");
        headers.setGDataVersion("2");
        request.setHeaders(headers);
      }
    });
  }




public void mainLogic(){
HttpRequest buildGetRequest = reqFactory.buildGetRequest(url);

        HttpResponse response = buildGetRequest.execute();
        albumFeed = response.parseAs(AlbumFeed.class);

}

}

AlbumEntry.java 类似于 我正在使用 xmlns 来测试行为)

    public class AlbumEntry extends Entry {

  @Key("xmlns")
  public String xmlns;


    }

JSON Feed 本身是这样的:

{"version":"1.0","encoding":"UTF-8",
"feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$gphoto":"http://schemas.google.com/photos/2007,……}}

【问题讨论】:

    标签: android json google-api-java-client picasa


    【解决方案1】:

    我太傻了。与 android/picasa api 上下文无关。

    阅读更多关于 GSON 文档的内容后,根据 json 对象 {} 将是一个映射而不是一个数组。数组可以映射到 List,map 可以映射到 Object 或 Map

    我变简单了

    @Key AlbumEntry feed;

    AlbumFeed.java

    它开始工作了。

    关于 GSON 的一个很好的参考在这里 Converting JSON to Java

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      相关资源
      最近更新 更多