0

こんにちは私はAndroidでpicasa写真を表示する簡単なアプリケーションを実装しようとしています。

多くの試行を経て、Picasaフィードを取得するためにGoogle Java Apiクライアント(Gdataクライアントではない)を使用しています。

version私のプログラムでは、フィード(および以下のコード)のJSONの最初のレイヤーフィールドをencoding正常にマッピングできるため、フィードと接続に問題はありませんが、2番目のレイヤーフィールドをオブジェクトにマッピングできません。

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フィード自体は次のようなものです。

{"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 /picasaapiコンテキストとは何の関係もありません。

GSONのドキュメントで詳細を読んだ後、jsonオブジェクトによると、{}はマップになりますが、配列にはなりません。配列はリストにマップできますが、マップはオブジェクトまたはマップにマップできます

シンプルに変更しました

@Key AlbumEntry feed;

AlbumFeed.java

動作を開始します。

GSONに関する優れたリファレンスはここにあり ますJSONからJavaへの変換

于 2012-06-30T07:22:20.353 に答える