Reputation: 591
When i open this class my application closes. the logcat says there is a problem with line 28 but the code on it i got from a question on here the code for ths class is below
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();
}*/
}
and the logcat is
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
Upvotes: 1
Views: 71
Reputation: 48871
Index -1 requested, with a size of 1
- this is caused because the Cursor is pointing to 'before' the first data row. You need to use c.moveToFirst()
...
if(c.getCount() > 0)
{
c.moveToFirst()
String g = c.getString(1);
...
}
A Cursor
will always initially be set to point to 'before' the first result (index -1) because not all queries will return any data. If there are results, the first result (data row) is at index 0 which is why you need to use moveToFirst()
or one of the other Cursor 'moveTo...' methods BEFORE attempting to retrieve data from the Cursor
Upvotes: 2