5

エラーが表示されるのは、「java.lang.IllegalArgumentException: クラス com.activeandroid.DatabaseHelper が mContext という名前の複数の JSON フィールドを宣言している」です。

AndroidAnnotations RestClient を使用して、Web サービスからデータを取得し、POJO にシリアル化しています。ORMLite を使用している間、シリアライゼーションは正常に機能しましたが、最近 Active Android を試してみることにしました。現在、私のクラスはモデルを拡張しています。Gson は、私が制御できない親クラスをシリアル化しています。特定のフィールドのみを含めるか、RestClientからプレーンなJSONを返して別の方法でシリアル化を行うことができる方法

@Rest(rootUrl = "http://stuff...com", converters = { GsonHttpMessageConverter.class })
    public interface RestClient {
    @Get("/AndroidController/createFacebookUser?facebookToken={facebookToken}&catIds=    {catIds}")
    User createFacebookUser(String facebookToken,String catIds);
}

そしてユーザーモデルは

@Data
@Table(name = "Users")
public class User extends Model {
@Column(name = "SystemID")
private String systemID;
@Column(name = "Name")
private String name;
public List<GameEntry> items() {
    return getMany(GameEntry.class, "Category");
}

public User(){}

}

4

2 に答える 2

7

Gson は、シリアライゼーションとデシリアライゼーションからフィールドと型を除外する複数の方法を提供します。シリアライゼーションとデシリアライゼーションからのフィールドの除外、特に@Expose注釈とユーザー定義の使用法を見てくださいExclusionStrategy

于 2013-03-12T05:07:03.323 に答える
4

ここでの回答に従って、AbstractHttpMessageConverterを拡張する独自のシリアライザーを作成しました

Jsonのことを行うための@ResponseBodyを使用したカスタムHttpMessageConverter

私が変更したのは、Gsonを作成し、シリアル化したいフィールドで@Exposeを使用したことだけです。

private Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
于 2013-03-13T01:45:43.483 に答える