説明が明確でない場合はお詫び申し上げますが、必要に応じて、この質問を追加して編集し、わかりやすくします。
外部APIを介してデータを受信し、ORMLiteを使用してローカルにデータを保存するAndroidアプリを開発しています。データをローカルに保存してORMLiteを使用する前は、サーバーからJSONを取得し、次の方法で解析するモデルがありました。
Gson gson = new Gson();
String result = ApiClient.httpPost("/user_route");
User user = gson.fromJson(result, User.class);
Userクラスが定義されました
public class User {
int id;
String name;
ArrayList<Image> media;
}
そしてImageクラス:
public class Image {
int id;
int creator_id;
String url;
}
これはモデルとメソッドの簡略化された表現ですが、私はすべての関連情報を保持していると思います。ところで、media
はを含むJSONオブジェクトImages
です。
現在、データをローカルにも保存しようとしています。ORMLiteを使用してユーザーと画像の関係を確立するには、ForeignCollectionクラスと@ForeignCollectionFieldアノテーションを使用する必要があるようです。GsonがUserクラスのフィールドのJsonをForeignCollectionオブジェクトとして直接解析できるとは思わないので、2つのフィールドとmedia
を作成する必要があると思いました。mediaCollection
media
ORMLiteを使用すると、Userクラスは次のようになります。
@DatabaseTable(tableName = "Users")
public class User {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
String name;
@ForeignCollectionField
ForeignCollection<Image> mediaCollection;
ArrayList<Image> media;
}
ORMLiteを使用したImageクラスは、次のようになります。
@DatabaseTable(tableName = "Images")
public class Image {
@DatabaseField(generatedId = true)
int id;
@DatabaseField(foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
private User user;
@DatabaseField
int creator_id;
@DatabaseField
String url;
}
アプリのフローがどのように機能するかは、最初にユーザーのローカルデータベースにアクセスします。ユーザーデータを「更新」または「更新」するために実際にサーバーにアクセスする必要があるかどうかを判断するロジックを実行します。
データがローカルにあるかリモートサーバーからのものであるかにかかわらず、Image
同じビューでを表示する必要があります。現在のところ、のURLはImage
、データがローカルかリモートかに応じて、さまざまなタイプのオブジェクトに保存されます。私がやりたいのは、がオブジェクトにImage
格納されているForeginCollection
場合、そのオブジェクトをに変換してから、 URLArrayList
を抽出して表示する残りのコードに進むことです。Image
2つの質問があると思います。
これは良い計画ですか、それともオブジェクトをからに
Image
変換するのではなく、データからURLを抽出する2つの完全に別個の方法を書く必要がありますか?ForeignCollection
ArrayList
それが良い計画である場合、どうすればa
ForeginCollection
をに変換できArrayList
ますか?