2012-05-27 106 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