私はコア ORMLite と Android の 4.46 バージョンを使用していますが、常にこの問題を抱えています。
フークラス
@DatabaseTable
public class Foo {
@DatabaseField(generatedId = true)
public int id;
@DatabaseField(index = true)
public String title;
@ForeignCollectionField
ForeignCollection<Foo2> foo2s;
public Foo() {
// needed by ormlite
}
}
Foo2 クラス
@DatabaseTable
public class Foo2 {
@DatabaseField(generatedId = true)
public int id;
@DatabaseField
public Date date;
public Foo2() {
// needed by ormlite
}
}
ORMLiteFragment (フラグメントから getHelper() を呼び出す必要があります)
public class OrmLiteFragment extends Fragment {
private DatabaseHelper databaseHelper = null;
protected DatabaseHelper getHelper() {
if (databaseHelper == null) {
databaseHelper =
OpenHelperManager.getHelper(getActivity(), DatabaseHelper.class);
}
return databaseHelper;
}
@Override
public void onDestroy() {
super.onDestroy();
if (databaseHelper != null) {
OpenHelperManager.releaseHelper();
databaseHelper = null;
}
}
}
アクティビティ
public class MainActivity extends FragmentActivity {
/**
* Some methods non important for this...
*/
public static class SectionFragment extends OrmLiteFragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
// Some code....
getHelper().getFoo2RuntimeDao(); // HERE FIRES THE ERROR!
// Some code....
}
}
}
DatabaseHelper クラスはAndroid のサンプル コード ページと同じですが、Foo2RuntimeDao() と Foo1RuntimeDao() が含まれています。
問題
09-03 14:27:15.756: E/AndroidRuntime(557): FATAL EXCEPTION: main
09-03 14:27:15.756: E/AndroidRuntime(557): java.lang.IllegalArgumentException: No fields have a DatabaseField annotation in class java.lang.Character
09-03 14:27:15.756: E/AndroidRuntime(557): at com.j256.ormlite.table.DatabaseTableConfig.extractFieldTypes(DatabaseTableConfig.java:215)
09-03 14:27:15.756: E/AndroidRuntime(557): at com.j256.ormlite.table.DatabaseTableConfig.fromClass(DatabaseTableConfig.java:146)
09-03 14:27:15.756: E/AndroidRuntime(557): at com.j256.ormlite.table.TableInfo.<init>(TableInfo.java:53)
09-03 14:27:15.756: E/AndroidRuntime(557): at com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:149)
09-03 14:27:15.756: E/AndroidRuntime(557): at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:126)
- アップデート 1
queryForAll() (リストを返す)を取得しようとして、以前にデータを保存していなかった場合、空のリストまたは null の代わりに NullPointerException が返されます。このような:
public class MainActivity2 extends OrmLiteBaseActivity<DatabaseHelper> {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getHelper().getChapterRunDao(); //This Works!
getHelper().getChapterRunDao().queryForAll(); //This throws NullPointerException
}
}
問題
09-04 15:32:13.261: E/AndroidRuntime(3615): FATAL EXCEPTION: main
09-04 15:32:13.261: E/AndroidRuntime(3615): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.emanga/com.emanga.ORMLite}: java.lang.NullPointerException
09-04 15:32:13.261: E/AndroidRuntime(3615): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
09-04 15:32:13.261: E/AndroidRuntime(3615): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)