2017-03-22 13 views
0

だから私は二つのフィールドと一つのレコードで、一つのテーブルを持っているデータベースを持っています。私はそのテーブルからすべてを取得するためにselectを使用しています。この関数に結果のカーソルを渡して、テーブルを表す文字列のぎざぎざの配列に変換しようとします。参考のためのみカーソルからレコードから最初の値を取得

public String[][] cursorTo2dString (Cursor cursor, String[] fields) { 

    int columnCount = cursor.getColumnCount(); 
    int count = cursor.getCount(); 
    String[][] string2dArray = new String[columnCount][count]; 

    Log.i("StringLengths", count + " & " + columnCount); 
    Log.i("CursorConts", DatabaseUtils.dumpCursorToString(cursor)); 

    if (cursor.moveToFirst()) { 

     for (int j=0; j<count && !cursor.isAfterLast(); j++) { 

      for (int i=0; i<columnCount; i++) { 

       Log.i("Cursor", cursor.getString(i)); 

       string2dArray[j][i] = cursor.getString(i); 

       Log.i("StringPoint", string2dArray[j][i]); 
      } 

      cursor.moveToNext(); 
     } 

    } 

、TagIdNo値は、現在だけでランダムに生成された数であるとして、私は実際に実装にランダムにこれを生成するつもりはない現れるものは何でも、私は、テストの目的のためにこれを使用しています。

I/StringLengths: 1 & 2 
I/CursorConts: >>>>> Dumping cursor [email protected] 
       0 { 
        TagIdNo=998 
        TagName=No Parental Permission 
       } 
       <<<<< 
I/Cursor: 998 
I/StringPoint: 998 
I/Cursor: No Parental Permission 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.programming.workingpomproject, PID: 23796 
        java.lang.IllegalStateException: Could not execute method for android:onClick 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
         at android.view.View.performClick(View.java:5226) 
         at android.view.View$PerformClick.run(View.java:21266) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:168) 
         at android.app.ActivityThread.main(ActivityThread.java:5845) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
        Caused by: java.lang.reflect.InvocationTargetException 
         at java.lang.reflect.Method.invoke(Native Method) 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
         at android.view.View.performClick(View.java:5226)  
         at android.view.View$PerformClick.run(View.java:21266)  
         at android.os.Handler.handleCallback(Handler.java:739)  
         at android.os.Handler.dispatchMessage(Handler.java:95)  
         at android.os.Looper.loop(Looper.java:168)  
         at android.app.ActivityThread.main(ActivityThread.java:5845)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)  
        Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 
         at com.example.programming.workingpomproject.DbHelper.cursorTo2dString(DbHelper.java:132) 
         at com.example.programming.workingpomproject.DbHelper.select(DbHelper.java:89) 
         at com.example.programming.workingpomproject.DbHelper.select(DbHelper.java:92) 
         at com.example.programming.workingpomproject.MainActivity.testDbMethodGet(MainActivity.java:66) 
         at com.example.programming.workingpomproject.MainActivity.dbStuff(MainActivity.java:61) 
         at java.lang.reflect.Method.invoke(Native Method)  
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
         at android.view.View.performClick(View.java:5226)  
         at android.view.View$PerformClick.run(View.java:21266)  
         at android.os.Handler.handleCallback(Handler.java:739)  
         at android.os.Handler.dispatchMessage(Handler.java:95)  
         at android.os.Looper.loop(Looper.java:168)  
         at android.app.ActivityThread.main(ActivityThread.java:5845)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)  

私はカーソルの内容を取るの異なる方法の多くを使用していない、と関係なく、私は最初の値のみを得ることができるもの(きた:

これは一貫して、次のコンソールに登場するとクラッシュしますこの場合の乱数)をデータベースに格納します。私はなぜ私が自分の第二の価値を得ていないのか誰もが知ることができるのか疑問に思っていました(現在のところ、 "親の許可なし")。

申し訳ありませんが、私は任意のコーディング標準を台無しにした場合、これは私の最初のAndroidプロジェクトとJavaで初めてのことですが、私はこのアプリケーションを数ヶ月間働いていますので、私はより良くなっていきたいと思っています。

任意およびすべてのアドバイス歓迎!

EDIT 1:ジョヴァンニによって示唆されているように、私はインスタンス化の列と行を入れ替える 場合は、私が代わりにこれを取得:

String[][] string2dArray = new String[count][columnCount]; 

これの代わりに、コンソールに次につながります他の結果:

I/CursorConts: >>>>> Dumping cursor [email protected] 
      0 { 
       TagIdNo=3259 
       TagName=No Parental Permission 
      } 
      <<<<< 
I/Cursor: 3259 
I/StringPoint: 3259 
I/Cursor: No Parental Permission 
I/StringPoint: No Parental Permission 
I/MovePos: true & false 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.programming.workingpomproject, PID: 24606 
        java.lang.IllegalStateException: Could not execute method for android:onClick 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
         at android.view.View.performClick(View.java:5226) 
         at android.view.View$PerformClick.run(View.java:21266) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:168) 
         at android.app.ActivityThread.main(ActivityThread.java:5845) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
        Caused by: java.lang.reflect.InvocationTargetException 
         at java.lang.reflect.Method.invoke(Native Method) 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
         at android.view.View.performClick(View.java:5226) 
         at android.view.View$PerformClick.run(View.java:21266) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:168) 
         at android.app.ActivityThread.main(ActivityThread.java:5845) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
        Caused by: android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1 
         at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460) 
         at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
         at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 
         at com.example.programming.workingpomproject.DbHelper.cursorTo2dString(DbHelper.java:155) 
         at com.example.programming.workingpomproject.DbHelper.select(DbHelper.java:89) 
         at com.example.programming.workingpomproject.DbHelper.select(DbHelper.java:92) 
         at com.example.programming.workingpomproject.MainActivity.testDbMethodGet(MainActivity.java:66) 
         at com.example.programming.workingpomproject.MainActivity.dbStuff(MainActivity.java:61) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
         at android.view.View.performClick(View.java:5226) 
         at android.view.View$PerformClick.run(View.java:21266) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:168) 
         at android.app.ActivityThread.main(ActivityThread.java:5845) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 

はこのカーソルの問題は、配列のインデックス1はちょうど私がカーソルのエラーを回避するための試みで台無しに何かされ、根本的な問題のようです。 これ以上のご支援をいただければ幸いです!

答えて

0

あなたがで割り当てたい配列は、アクセスしようとしている正しいサイズを持っていないことを意味し、ArrayIndexOutOfBoundsExceptionを得ました。例えば、私のような配列作成した場合:私の配列は、2つのオブジェクトのための唯一の場所を持っているので

String[] array = new String[2]; 
int i = 3; 
String s = array[i]; 

をこれがない3

あなたの配列が、私が思うString[][] string2dArray = new String[columnCount][count];

で、例外がスローされますあなたはそれを変更することにより、それを修正することができます:

String[][] string2dArray = new String[count][columnCount];

ここにあるので:

あなたの助けのためのの
for (int j = 0; j < count && !cursor.isAfterLast(); j++) { 
    for (int i = 0; i < columnCount; i++) { 
     Log.i("Cursor", cursor.getString(i)); 

     // j should be count size, see the first for loop 

     string2dArray[j][i] = cursor.getString(i); 
     Log.i("StringPoint", string2dArray[j][i]); 
    } 
    cursor.moveToNext(); 
} 
+0

感謝。これは私が以前から移動した問題(私は解決したと思ったが、明らかに別の壁に突っ込んでしまった)につながるようだ。 私はこれを表示するために私のポストを改正しました。 –

+0

2番目の問題を投稿することができます。問題が解決された場合は –

+0

というマークを付けてください。2番目の問題を表示するために私の投稿を修正しました。さらに援助を要請しましたが、カーソル問題の別のスレッドを技術的に別の問題として作成します。あなたの助けに感謝ジョバンニ! –

関連する問題