2012-12-20 6 views
2

나는 웹과 stackoverflow 검색했지만 내가 원하는 해결책을 찾을 수 없습니다. 내 응용 프로그램에서 나는 가속도계 좌표 값을 데이터베이스에 기록한 다음 사용자가 버튼을 클릭하면 파일에 기록하고이 좌표 값에 대한 일부 기능을 생성합니다 (예 : 표준 편차, 평균, 최대, 최소 등). 주어진 시간 간격으로) 마지막으로이 기능을 파일에 씁니다. 그러나 필자가 이러한 기능을 생성하여 파일에 기록하려고 시도했을 때 충돌이 발생하여이를 제거했습니다.안드로이드 커서 충돌

Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 1 columns. 
FATAL EXCEPTION: main 
java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
    at android.database.CursorWindow.nativeGetDouble(Native Method) 
    at android.database.CursorWindow.getDouble(CursorWindow.java:543) 
    at android.database.CursorWindow.getFloat(CursorWindow.java:594) 
    at android.database.AbstractWindowedCursor.getFloat(AbstractWindowedCursor.java:81) 
    at com.example.coordinates.MainActivity.generateFeatures(MainActivity.java:259) 
    at com.example.coordinates.MainActivity.dosyayaYaz(MainActivity.java:239) 
    at com.example.coordinates.MainActivity.onDialogPositiveClick(MainActivity.java:668) 
    at com.example.coordinates.dialogFragement$1.onClick(dialogFragement.java:54) 
    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4898) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
    at dalvik.system.NativeStart.main(Native Method) 

여기는 오류가 발생하는 곳입니다.

private void generateFeatures(String label){ 

     boolean bitti=false; 

     Cursor firstTimeHandler=db.rawQuery("SELECT MIN(zaman) FROM Koordinatlar", null); 
     firstTimeHandler.moveToFirst(); 

     float firstTime= firstTimeHandler.getFloat(firstTimeHandler.getColumnIndex("zaman")); 
     float nextTime=firstTime+3000; 

     Cursor lastTimeHandler=db.rawQuery("SELECT MAX(zaman) FROM Koordinatlar", null); 
     lastTimeHandler.moveToFirst(); 

     float lastTime=lastTimeHandler.getFloat(firstTimeHandler.getColumnIndex("zaman")); 



     while(!bitti){ 

      calculateAverage(firstTime,nextTime); 
      calculateStandartDev(firstTime,nextTime); 
      calculateAverageAbsoluteDifferance(firstTime,nextTime); 
      calculateAverageResultant(firstTime,nextTime); 
      calculateMax(firstTime,nextTime); 

      firstTime=nextTime; 
      nextTime=nextTime+3000; 

      if(nextTime>=lastTime){ 
       nextTime=lastTime; 

       calculateAverage(firstTime,nextTime); 
       calculateStandartDev(firstTime,nextTime); 
       calculateAverageAbsoluteDifferance(firstTime,nextTime); 
       calculateAverageResultant(firstTime,nextTime); 
       calculateMax(firstTime,nextTime); 

       bitti=true; 

      } 

     } 

     dosyayaYaz2(label); 
    } 

답변

1

나는 cursor.getFloat을 건의 할 것 (0) 만 커서 한 열이 다른 사람들이 MIN의 이름을 언급 한대로 내가 그것을 확인했습니다

0

로그 잘못 Couldn't read row 0, col -1 from CursorWindow.

가 기본적으로 존재 나던 필드에 액세스하려고 무슨 말한다. 이것은/또는 firstTime 선언과 같은 줄에 의해 발생합니다.

float lastTime=lastTimeHandler.getFloat(firstTimeHandler.getColumnIndex("zaman")); 

그래서 기본적으로 zaman 필드가 존재하지 않습니다.

하지만 그렇습니까?

케이스를 확인하십시오. 그것의 대소 문자를 구별 일부 bizaree 이유로. 그것은 가능성이 열이 Zaman하지 zamon

SQL은 대소 문자를 구분 왜, 열 인덱스를 얻을이 안드로이드 API가 아닌 이름이다.

+0

(자만)이 그에 아무 문제가 까다로운 없기 때문에 . – metzelder