2012-05-27 34 views
1

當我打開此課程時,我的申請關閉。在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 

回答

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()或其他光標的moveTo ...方法之一,然後才能嘗試從Cursor

+0

+1你是對的 :) – waqaslam