【发布时间】:2012-06-16 11:34:11
【问题描述】:
您好,我正在尝试实现一个在 android 中显示 picasa 照片的简单应用程序。
经过多次试验,现在我使用 Google Java Api 客户端(不是 Gdata 客户端)来获取 Picasa 供稿。
在我的程序中,Feed中JSON的第一层字段(例如下面代码中的version和encoding)可以成功映射,所以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 <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,……}}
【问题讨论】:
标签: android json google-api-java-client picasa