Предостережение
Возможно, есть более простой / умный способ сделать это. Я не хороший Android разработчик. Пожалуйста, сообщите
Проблема
У меня есть библиотека с около 100 различных моделей. Теперь я должен сделать все эти модели пригодными для продажи.
Вместо реализации writeToParcel
для каждого , я подумал, что было бы неплохо, если бы я мог просто создайте суперкласс, который использовал generi c сериализацию logi c. Что-то вроде следующего:
public abstract class Model implements Parcelable
{
public final static Parcelable.Creator<Model> CREATOR = new Parcelable.Creator<Model>() {
@Override
public Model createFromParcel ( Parcel parcel )
{
Gson gson = new Gson();
String type = parcel.readString();
String serialized = parcel.readString();
gson.fromJson(serialized, /* HELP ME */)
}
@Override
public Model[] newArray ( int i )
{
// TODO: I haven't even read the docs on this method yet
}
};
@Override
public int describeContents ()
{
return 0;
}
@Override
public void writeToParcel ( Parcel parcel, int i )
{
Gson gson = new Gson();
String type = this.getClass().getName();
String serialized = gson.toJson(this);
parcel.writeString(type);
parcel.writeString(serialized);
}
}
Тогда в каждой из моих моделей я просто говорю:
public class Whatever extends Model {
Проблема в том, что Гсон требует от меня предоставить Type
, чтобы сериализации. Как я могу получить это значение Type
? Как вы можете видеть, я пытался использовать this.getClass().getName()
, чтобы получить имя класса, но я понятия не имею, как изменить это и go из строки обратно в тип. Я также не до конца понимаю разницу между Class<T>
и Type
.