2011-10-19 8 views
1

私はカーソルの問題を知っていますが、これを解決するにはどうしたらいいですか? コードモードに入る前に最初に達成しようとしているアイデアを説明しましょう。不明な理由でAndroidカーソルのインデックスが外に出る

SQL Liteには2つのテーブルがあります。

tbl_checkpoints _id | parent_id |タイトル| is_checked |数量

tbl_checkpoint_answers _id | parent_id |答え|ノート| is_checked

カーソル賢明両方が列の等しい量を有するので、アレイは勿論であろう: 0 = _id 1 = PARENT_ID 2 =タイトル/回答 3 = 4 =量/ をis_checked is_checked /音符( /がtbl_checkpointsの前にあるのは、tbl_checkpoint_answersです)

チェックポイントには数量を指定できます。たとえば、数量が5であるとします。 チェックポイントは5回チェックする必要があります。例えば、家では、チェックポイントは次のようになります。 は レンガ1 "完璧な状態でレンガです":はい レンガ2:はい レンガ3:なし レンガ4:ノー レンガ5:はい

これらの答えはtable_checkpoint_answersテーブルに属しています。 1対多の関係。 1つのチェックポイントに複数の回答を含めることができます。

コードを使用すると、チェックポイントを埋めるためにフォームを表示するアクティビティを使用しています。 フォーム内で、タブレイアウトに存在します。ここでは何が起こる

私はのonCreate(このようなセットアップを持っている)

_checkPointCursor = _dbHelper.fetchAllCheckPoints(_parentId); 

//I know startManagingCursor() is deprecated. I don't know how to use the new version yet. 
startManagingCursor(_checkpointCursor); 

_cursor.moveToPosition(_position); 
_answerCursor = _dbHelper.fetchFirstCheckPointAnswer(_checkPointCursor.getInt(0)); 
//getInt(0) returns 1 which is what I expect. (debugged) 

は私がのParentIDは、与えられた数に等しいすべてのチェックポイントを持っているカーソルを持っています。 。。この場合、1(テストクエリの確認イムれ、1であることを、それを強制は結果が得られます

私はfetchAllCheckPoints(_parentId)に使用するクエリは、次のとおりです。

SELECT * FROM tbl_checkpoints WHERE parent_id = parentId // parentId = 1 

これは私を与える5 。その結果これは、プログラムのaswellで真であり、それは今uptil正常に動作します _checkpointCursor MCOUNTがデバッガに応じて5である

次のクエリは、fetchFirstCheckPointAnswer();である:。。

SELECT * FROM tbl_checkpointAnswers WHERE parent_id = parentId ORDER BY _id ASC LIMIT 0,1 
    //primary key of the selected _checkPointCursor() which is 1. so parentId = 1. 
    //Things going well so far.. 

このクエリが実行された後、2種類のソフトウェアを使用してチェックしたところ、1つの結果が得られます。それはまさに私が欲しいものです。

今カーソルはsais mCount = -1です。 なぜですか? _answerCursor -1にmCountがあるのはなぜですか? 質問から結果が得られると確信しています。私が使用している場合

プログラム後のクラッシュ:

textView.setText(_answerCursor。getString(2));

スタックトレース:

10-19 14:10:04.651: ERROR/AndroidRuntime(12997): FATAL EXCEPTION: main10-19 14:10:04.651: ERROR/AndroidRuntime(12997): java.lang.RuntimeException: Unable to resume activity {com.wvds.activities/com.wvds.activities.TabbedCheckPointActivity}: java.lang.RuntimeException: Unable to resume activity {com.wvds.activities/com.wvds.activities.CheckPointFormActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 110-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.os.Handler.dispatchMessage(Handler.java:99)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.os.Looper.loop(Looper.java:123)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread.main(ActivityThread.java:4627)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at java.lang.reflect.Method.invokeNative(Native Method)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at java.lang.reflect.Method.invoke(Method.java:521)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at dalvik.system.NativeStart.main(Native Method)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): Caused by: java.lang.RuntimeException: Unable to resume activity {com.wvds.activities/com.wvds.activities.CheckPointFormActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 110-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:170)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.LocalActivityManager.dispatchResume(LocalActivityManager.java:518)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityGroup.onResume(ActivityGroup.java:58)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.Activity.performResume(Activity.java:3823)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  ... 12 more10-19 14:10:04.651: ERROR/AndroidRuntime(12997): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 110-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at com.wvds.activities.CheckPointFormActivity.loadView(CheckPointFormActivity.java:289)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at com.wvds.activities.CheckPointFormActivity.onResume(CheckPointFormActivity.java:126)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.Activity.performResume(Activity.java:3823)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)10-19 14:10:04.651: ERROR/AndroidRuntime(12997):  ... 18 more 

私は誰かが私はこの問題を解決することができます願っています。私はあなたの答え/ヘルプを読むことを楽しみにしています。

ありがとうございます。

Btw実際のコードにはタイプミスがありますが、タイプミスはありません。それが実行されないようにしてください。 私は自分のプログラミングPC上でインターネットを使用することはできません。だから私はこれを書くためにインターネットのPCを使用します。

+0

cursor.getCount()は何ですか? – user370305

+0

チェックしませんでした。しかし、エラーは解決されます。私は非常に憂鬱なものを見落としました。 –

答えて

2

追加データを追加する前にcursor.movetofirst();

+0

私はそれがとても簡単だと信じていません。私はそれを完全に見落とした。私はそれがunnescesaryだったのでtought。それは1つの結果しかないからです。どうもありがとう。 –

+0

カーソルがどこから始まっているか説明できます。ちょうどそれが1つの結果 –

+1

を持っていても、正確に-1から始まります。 –

関連する問題