嗨我试图实现一个简单的应用程序,在android中显示picasa照片。解析Android中的Picasa API JSON Feed
经过多次试用后,我使用Google Java Api Client(不是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,……}}