可能重複:
System services not available to Activities before onCreate?光標和SimpleCursorAdapter
我試圖數據庫的值返回到ListView但我得到一個錯誤。我正在使用遊標從表中獲取數據,並使用SimpleCursorAdapter讀取遊標。這是做這個的方法:
public void getData(){
String[] columns = new String[] {ModuleDB.KEY_ROWID,
ModuleDB.KEY_MODCODE,
ModuleDB.KEY_MODNAME,
ModuleDB.KEY_LECPRAC,
ModuleDB.KEY_DAYS,
ModuleDB.KEY_TIMESTART,
ModuleDB.KEY_TIMEEND,
ModuleDB.KEY_LOCATION,
ModuleDB.KEY_INFO};
int[] to = new int[]{R.id.modcode_entry,
R.id.modname_entry,
R.id.modlecprac_entry,
R.id.modday_entry,
R.id.modtimestart_entry,
R.id.modtimeend_entry,
R.id.modlocation_entry,
R.id.modaddinfo_entry};
Cursor curs = myDatabase.query(ModuleDB.DB_TABLE, columns, null, null, null, null, null);
if (curs != null)
curs.moveToFirst();
SimpleCursorAdapter dataSource = new SimpleCursorAdapter(ModuleDataSource.this, R.layout.list_entry, curs, columns, to);
this.setListAdapter(dataSource);
// Make sure to close the cursor
curs.close();
}
這種方法導致了異常:"System Services not available to activites before onCreate()"
誰能幫助我?我找不到光標和cursoradapters任何好的教程,我真的很徹底失去
編輯:
這可能會有幫助。
MainActivity.java
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ModuleDataSource dbinfo = new ModuleDataSource(this);
dbinfo.open();
dbinfo.getData();
dbinfo.close();
}
ModuleDataSource.java
public class ModuleDataSource extends ListActivity{
private SQLiteDatabase myDatabase;
private ModuleDB myhelper;
public ModuleDataSource(Context context){
myhelper = new ModuleDB(context);
}
public void open() throws SQLException { //Open the database for writing
myDatabase = myhelper.getWritableDatabase();
}
public void close(){ //Close the database
myhelper.close();
}
public void getData(){
String[] columns = new String[] {ModuleDB.KEY_ROWID,
ModuleDB.KEY_MODCODE,
ModuleDB.KEY_MODNAME,
ModuleDB.KEY_LECPRAC,
ModuleDB.KEY_DAYS,
ModuleDB.KEY_TIMESTART,
ModuleDB.KEY_TIMEEND,
ModuleDB.KEY_LOCATION,
ModuleDB.KEY_INFO};
int[] to = new int[]{R.id.modcode_entry,
R.id.modname_entry,
R.id.modlecprac_entry,
R.id.modday_entry,
R.id.modtimestart_entry,
R.id.modtimeend_entry,
R.id.modlocation_entry,
R.id.modaddinfo_entry};
Cursor curs = myDatabase.query(ModuleDB.DB_TABLE, columns, null, null, null, null, null);
startManagingCursor(curs);
if (curs != null)
curs.moveToFirst();
SimpleCursorAdapter dataSource = new SimpleCursorAdapter(ModuleDataSource.this, R.layout.list_entry, curs, columns, to);
setListAdapter(dataSource);
}
}
EDIT2:logcat的
11-06 23:24:07.885: D/AndroidRuntime(887): Shutting down VM
11-06 23:24:07.885: W/dalvikvm(887): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-06 23:24:07.895: E/AndroidRuntime(887): FATAL EXCEPTION: main
11-06 23:24:07.895: E/AndroidRuntime(887): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adoherty.assignment3/com.adoherty.assignment3.MainActivity}:
java.lang.IllegalStateException: System services not available to Activities before onCreate()
11-06 23:24:07.895: E/AndroidRuntime(887): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.os.Looper.loop(Looper.java:123)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-06 23:24:07.895: E/AndroidRuntime(887): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 23:24:07.895: E/AndroidRuntime(887): at java.lang.reflect.Method.invoke(Method.java:521)
11-06 23:24:07.895: E/AndroidRuntime(887): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-06 23:24:07.895: E/AndroidRuntime(887): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-06 23:24:07.895: E/AndroidRuntime(887): at dalvik.system.NativeStart.main(Native Method)
11-06 23:24:07.895: E/AndroidRuntime(887): Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
11-06 23:24:07.895: E/AndroidRuntime(887): at android.app.Activity.getSystemService(Activity.java:3526)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:49)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:84)
11-06 23:24:07.895: E/AndroidRuntime(887): at com.adoherty.assignment3.ModuleDataSource.getData(ModuleDataSource.java:74)
11-06 23:24:07.895: E/AndroidRuntime(887): at com.adoherty.assignment3.MainActivity.onCreate(MainActivity.java:17)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-06 23:24:07.895: E/AndroidRuntime(887): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-06 23:24:07.895: E/AndroidRuntime(887): ... 11 more
類似的質疑http://stackoverflow.com/questions/5905587/system-services-not-available-to-activities-before-oncreate –
當您移動調用會發生什麼' getData()'到'onCreate()'? – Sam
您無法執行以下操作... ** ModuleDataSource dbinfo = new ModuleDataSource(this); ** - 您的'ModuleDataSource'擴展了'ListActivity',並且您無法使用'new'創建任何類型的'Activity'的實例。此外,您絕不能嘗試從除「Activity」本身之外的任何地方調用方法或訪問屬於「Activity」的字段。 – Squonk