use*_*379 13 java android gson
我有一个名为的类PageItem,它有一个带有Contextas参数的构造函数:
PageItem(Context context)
{
super(context);
this.context = context;
}
Run Code Online (Sandbox Code Playgroud)
PageItem 有这些属性:
private int id;
private String Title;
private String Description;
public Newsprovider newsprovider;
public Topic topic;
Run Code Online (Sandbox Code Playgroud)
Newsprovider并且Topic是我的应用程序的其他类,并具有以下构造函数:
Newsprovider (Context context)
{
super(context);
this.context = context;
}
Topic (Context context)
{
super(context);
this.context = context;
}
Run Code Online (Sandbox Code Playgroud)
PageItem,Newsprovider并且Topic是的子类SQLiteOpenHelper.
我想PageItem用Gson 反序列化数组,所以我写道:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(PageItem.class, new PageItemInstanceCreator(context));
Gson gson = gsonBuilder.create();
Pageitem pis[] = gson.fromJson(s, PageItem[].class);
Run Code Online (Sandbox Code Playgroud)
以PageItemInstanceCreator定义为:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在调试时,PageItem实例具有正确的"MainActivity"作为上下文,但其newsprovider成员变量具有context = null.
Gson PageItem使用正确的构造函数创建了对象,但它Newsprovider使用默认的无参数构造函数创建了实例.我怎样才能解决这个问题?
gia*_*olo 13
只需添加一个新的InstanceCreator派生类,NewsProvider如下所示:
public class NewsProviderInstanceCreator implements InstanceCreator<NewsProvider>
{
private int context;
public NewsProviderInstanceCreator(int context)
{
this.context = context;
}
@Override
public NewsProvider createInstance(Type type)
{
NewsProvider np = new NewsProvider(context);
return np;
}
}
Run Code Online (Sandbox Code Playgroud)
并将其注册到GsonBuilder您已经完成的任务中,如下所示:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(PageItem.class, new PageItemInstanceCreator(context));
gsonBuilder.registerTypeAdapter(NewsProvider.class, new NewsProviderInstanceCreator(context));
Gson gson = gsonBuilder.create();
PageItem pis[] = gson.fromJson(s, PageItem[].class);
Run Code Online (Sandbox Code Playgroud)
Topic上课也重复一遍.
| 归档时间: |
|
| 查看次数: |
13683 次 |
| 最近记录: |