OrmLite ライブラリを使用して、Android アプリケーションでデータベースを操作しています。Android のすべてのバージョンで問題なく動作しますが、Android 5.1.1 (API 22) で問題が発生しました。クラスがありDBHelper extends OrmLiteSqliteOpenHelper
ます。onCreate メソッドで、データベースのテーブルを作成します
@Override
public void onCreate(SQLiteDatabase db, final ConnectionSource connectionSource)
{
try {
for (Class c : models)
TableUtils.createTableIfNotExists(connectionSource, c);
}
catch (Throwable e) {
e.printStackTrace();
Logger.e("error creating DB " + DATABASE_NAME);
}
}
変数models
は、各テーブルのフィールドを記述するクラスの配列です。
Class[] models = {
User.class,
Profile.class,
Offer.class,
Partner.class,
OfferCategory.class,
PrizeCategory.class,
...
テーブル OfferCategory の作成時に例外が発生することがわかりましたjava.lang.NullPointerException: Attempt to invoke interface method 'int com.j256.ormlite.field.DataPersister.getDefaultWidth()' on a null object reference
。これが私のクラスです
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
@JsonIgnoreProperties(ignoreUnknown=true)
@DatabaseTable(tableName= DbHelper.TABLE_CATEGORY)
public class OfferCategory implements Serializable
{
public static final String FIELD_ID = "_id",
FIELD_ORDER = "_order";
public Bundle toBundle()
{
final Bundle b = new Bundle();
b.putSerializable(getClass().getName(), this);
return b;
}
public static final BaseModel fromBundle(final Bundle b, final Class<?> cl)
{
if (b != null && b.containsKey(cl.getName()))
{
return (BaseModel) b.getSerializable(cl.getName());
}
return null;
}
/**
*
*/
private static final long serialVersionUID = 7805031064669698244L;
@DatabaseField(unique=true, canBeNull=false, columnName=FIELD_ID, id=true)
@JsonProperty(required=true)
public int id;
@DatabaseField
public String name;
@DatabaseField(foreign=true, foreignAutoRefresh = true, foreignAutoCreate=true, foreignColumnName = FIELD_ID)
public Offer offer;
public OfferCategory()
{
}
public OfferCategory(final int id)
{
this.id = id;
}
}
このコードがすべての Android バージョンで正常に動作する理由がわかりませんが、Android 5.1.1 (API 22) でのみ例外がスローされます。最近の Android バージョンでは、すべて正常に動作します。
何が問題なのか教えてください。ありがとう。