3

こんにちは、RoboSpice と ORMLite および SpringAndroidSpiceRequest を使用して、Web ページから JSON 情報を読み取り、SQLite データベースに書き込みます。

最新の JSON マッパー MappingJackson2HttpMessageConverter を使用しています。

        // Web services support JSON responses
        MappingJackson2HttpMessageConverter jsonConverter = new  MappingJackson2HttpMessageConverter();
        FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
        StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
        final List<HttpMessageConverter<?>> listHttpMessageConverters = restTemplate.getMessageConverters();

以下の例のように、ネストされた JSON クエリを読み取ろうとしました。JSON の最初のレベル (ページ、合計) を読み取ってデータベースに格納できますが、JSON 配列の次のレベルを格納することはできません。 」のエントリ。

JSON データを保存するための最良の例として、この例 (およびその他の例) を見てきました。しかし、それは私たちにはうまくいきません。RoboSpice は OrmLite を使用して JSON 配列を永続化します

質問: ネストされた JSON のキーと値を読み書きするにはどうすればよいでしょうか。困惑しています。:O

JSON:

{
   "page": 2,
   "total": 5,
   "result":
   [
       {
           "schedule_date": "2013-08-03"
       },
       {
           "schedule_date": "2013-09-03"
       },
       {
           "schedule_date": "2013-10-03"
       },
       {
           "schedule_date": "2013-11-03"
       },
       {
           "schedule_date": "2013-12-03"
       }
   ]
}

BroadcastResult.java:

            import java.util.Collection;
            import java.util.List;
            import com.j256.ormlite.field.DatabaseField;
            import com.j256.ormlite.table.DatabaseTable;
            import com.j256.ormlite.field.ForeignCollectionField;
            import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

            @JsonIgnoreProperties(ignoreUnknown = true)
            @DatabaseTable(tableName="BroadcastResult")
            public class BroadcastResult {

                @DatabaseField(id = true)
                private int page;

                @DatabaseField
                private int total;

                @ForeignCollectionField(eager = false)
                private Collection<Broadcast> result;

                public int getPage() {
                    return page;
                }

                public void setPage(int page) {
                    this.page = page;
                }

                public int getTotal() {
                    return total;
                }

                public void setTotal(int total) {
                    this.total = total;
                }

                public Collection<Broadcast> getResult() {
                    return result;
                }

                public void setResult(Collection<Broadcast> result) {
                    this.result = result;
                }
            }

ブロードキャスト.java:

            import com.j256.ormlite.field.DatabaseField;
            import com.j256.ormlite.table.DatabaseTable;
            import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

            @JsonIgnoreProperties(ignoreUnknown = true)
            @DatabaseTable(tableName="Broadcast")
            public class Broadcast {

                @DatabaseField(id = true)
                private String schedule_date;

                @DatabaseField(foreign = true)
                private BroadcastResult result;

                public String getScheduleDate() {
                    return schedule_date;
                }

                public void setScheduleDate(String schedule_date) {
                    this.schedule_date = schedule_date;
                }

                public void setBroadcastResult(BroadcastResult result) {
                    this.result = result;
                }

                public BroadcastResult getBroadcastResult() {
                    return result;
                }   
            }

このエラーが発生しましたが、理解できません。
Logcat: SQLiteLog(10637): (1) そのような列はありません: result_id

@DatabaseField(foreign = true) // also tried (foreign = true, ColumnName="result")
private BroadcastResult result;

実行テストの完全なログは、 https ://gist.github.com/anonymous/7760344 で確認できます 。

4

1 に答える 1

0

追加してみましたか

@DatabaseField(generatedId = true)
private int _id;

あなたの Broadcast.java クラスに?

于 2014-09-20T05:19:19.400 に答える