2012-06-16 66 views
0

嗨我试图实现一个简单的应用程序,在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,……}} 

回答

0

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

在阅读了关于GSON文档的更多内容之后,根据json对象{}将是一个映射而不是一个数组。虽然阵列可以映射到名单,地图可以被映射到一个对象或地图

我改简单

@Key AlbumEntry feed;

AlbumFeed.java

它开始工作。

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