15

という名前のクラスがあり、パラメーターとして受け取るPageItemコンストラクターがあります。Context

PageItem(Context context)
{
    super(context);
    this.context = context;
}

PageItem次のプロパティがあります。

private int id; 
private String Title; 
private String Description; 
public Newsprovider newsprovider; 
public Topic topic;

NewsproviderおよびTopic私のアプリケーションの他のクラスであり、次のコンストラクターがあります。

Newsprovider (Context context)
{
    super(context);
    this.context = context;
}

Topic (Context context)
{
    super(context);
    this.context = context;
}

PageItemNewsproviderおよびTopicのサブクラスですSQLiteOpenHelper

Gson で配列をデシリアライズしたいPageItemので、次のように書きました。

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(PageItem.class, new PageItemInstanceCreator(context));
Gson gson = gsonBuilder.create();
Pageitem pis[] = gson.fromJson(s, PageItem[].class);

次のように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; 
        }
}

デバッグ時に、PageItemインスタンスにはコンテキストとして正しく「MainActivity」がありますが、そのnewsproviderメンバー変数には context = null があります。

GsonPageItemは正しいコンストラクターを使用してオブジェクトを作成しましたがNewsprovider、デフォルトのパラメーターなしのコンストラクターを使用してインスタンスを作成しました。どうすればこれを修正できますか?

4

1 に答える 1

15

次のような新しい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; 
        }

}

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);

Topicクラスでも繰り返します。

于 2013-09-02T22:13:51.827 に答える