0

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

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

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

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

从官方样本我有这个 AlbumFeed.java

    public class AlbumFeed {

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

      @Key
      String version;

      @Key
      String encoding;

}

List <AlbumEntry> 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<AlbumEntry> 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,……}}
4

1 回答 1

0

愚蠢的我。与 android/picasa api 上下文无关。

在阅读了有关 GSON 文档的更多信息后,根据 json object {} 将是一个 map 而不是一个 array 。数组可以映射到 List,map 可以映射到 Object 或 Map

我变简单了

@Key AlbumEntry feed;

AlbumFeed.java

它开始工作。

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

于 2012-06-30T07:22:20.353 回答