嗨,我正在尝试实现一个在 android 中显示 picasa 照片的简单应用程序。
经过多次试验,现在我使用 Google Java Api 客户端(不是 Gdata 客户端)来获取 Picasa Feed。
在我的程序中,可以成功映射提要中 JSON 的第一层字段(例如下面version
的encoding
代码),因此提要和连接没有问题但是我无法将第二层字段映射到对象中。
我使用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,……}}