当我打开这个课程时,我的申请会关闭。 logcat说第28行有一个问题,但我在here的问题上得到了代码,该类的代码在下面
public class WorkoutProgress extends ListActivity {
private DataBaseHelper datasource;
TextView goal;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams. FLAG_FULLSCREEN);
setContentView(R.layout.progress);
goal = (TextView)findViewById(R.id.goal);
datasource = new DataBaseHelper(this);
datasource.open();
Cursor c = datasource.getAllGoals();
startManagingCursor(c);
if(c.getCount() > 0)
{
String g = c.getString(1);
int g2= c.getInt(2);
int g3 = c.getInt(3);
String Goal = (g+g2+g3);
goal.setText(Goal);
}
fillData();
datasource.close();
}
private void fillData() {
// Get all of the notes from the database and create the item list
Cursor c = datasource.getAllActs();
startManagingCursor(c);
String[] from = new String[] {DataBaseHelper.KEY_DATE,
DataBaseHelper.KEY_STEPS,DataBaseHelper.KEY_CALs };
int[] to = { R.id.code, R.id.Days, R.id.BMI };
SimpleCursorAdapter notes = new SimpleCursorAdapter (this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
}
/*public void add(View view)
{
//Do nothing
}
public void delete(View view)
{
datasource.open();
datasource.deleteFirst();
fillData();
datasource.close();
}*/
}
并且logcat是
05-27 17:39:08.531: E/AndroidRuntime(369): FATAL EXCEPTION: main
05-27 17:39:08.531: E/AndroidRuntime(369): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.b00348312.workout/com.b00348312.workout.WorkoutProgress}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
05-27 17:39:08.531: E/AndroidRuntime(369): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.os.Handler.dispatchMessage(Handler.java:99)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.os.Looper.loop(Looper.java:123)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-27 17:39:08.531: E/AndroidRuntime(369): at java.lang.reflect.Method.invokeNative(Native Method)
05-27 17:39:08.531: E/AndroidRuntime(369): at java.lang.reflect.Method.invoke(Method.java:521)
05-27 17:39:08.531: E/AndroidRuntime(369): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-27 17:39:08.531: E/AndroidRuntime(369): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-27 17:39:08.531: E/AndroidRuntime(369): at dalvik.system.NativeStart.main(Native Method)
05-27 17:39:08.531: E/AndroidRuntime(369): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
05-27 17:39:08.531: E/AndroidRuntime(369): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
05-27 17:39:08.531: E/AndroidRuntime(369): at com.b00348312.workout.WorkoutProgress.onCreate(WorkoutProgress.java:28)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-27 17:39:08.531: E/AndroidRuntime(369): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-27 17:39:08.531: E/AndroidRuntime(369): ... 11 more
答案 0 :(得分:2)
Index -1 requested, with a size of 1
- 这是因为Cursor指向第一个数据行的“之前”。您需要使用c.moveToFirst()
...
if(c.getCount() > 0)
{
c.moveToFirst()
String g = c.getString(1);
...
}
始终将Cursor
设置为指向第一个结果(索引-1)之前的“之前”,因为并非所有查询都会返回任何数据。如果有结果,则第一个结果(数据行)位于索引0,这就是为什么在尝试从{{检索数据之前需要使用moveToFirst()
或其他Cursor'moveTo ...'方法之一的原因1}}