Ich habe eine Klasse PageItem
genannt, die einen Konstruktor hat, der einen Context
als Parameter übernimmt:Gson Deserialisieren verschachtelte Objekte mit InstanceCreator
PageItem(Context context)
{
super(context);
this.context = context;
}
PageItem
hat folgende Eigenschaften:
private int id;
private String Title;
private String Description;
public Newsprovider newsprovider;
public Topic topic;
Newsprovider
und Topic
sind andere Klassen meiner Anwendung und haben die folgenden Konstruktoren:
Newsprovider (Context context)
{
super(context);
this.context = context;
}
Topic (Context context)
{
super(context);
this.context = context;
}
PageItem
, Newsprovider
und Topic
sind Unterklassen von SQLiteOpenHelper
.
Ich möchte PageItem
Array mit Gson deserialisieren, so schrieb ich:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(PageItem.class, new PageItemInstanceCreator(context));
Gson gson = gsonBuilder.create();
Pageitem pis[] = gson.fromJson(s, PageItem[].class);
mit PageItemInstanceCreator
wie folgt definiert:
public class PageItemInstanceCreator implements InstanceCreator<PageItem>
{
private Context context;
public PageItemInstanceCreator(Context context)
{
this.context = context;
}
@Override
public PageItem createInstance(Type type)
{
PageItem pi = new PageItem(context);
return pi;
}
}
Wenn Debugging, eine PageItem
Instanz richtig "MainActivity" als Kontext hat, während aber seine newsprovider
Mitgliedsvariable hat context = null.
Gson erstellt PageItem
Objekt mit dem richtigen Konstruktor, aber es erstellt Newsprovider
Instanz mit dem standardmäßigen parameterlosen Konstruktor. Wie kann ich das beheben?