2017-11-30 18 views
0

正確な単語trasnlationアプリケーションを作成しています。私は私のsqliteと私のアプリ内の言葉のペアが正確なリテラルの一致(文字列で文字列)がqueuingされたときに結果を返します。 私の問題は、私は、クエリを発行したとき、私はAndroidのSQLiteので境界例外外のインデックスを取得することですSQLiteでインデックスの範囲外の例外が発生しています

android.database.CursorIndexOutOfBoundsException:その後、0

のサイズのインデックス0が要求され、 私が試してみて、それがスローすべてのレコードを選択

W/System.errの:android.database.CursorIndexOutOfBoundsException:インデックス 24は24

012の大きさで、要求されましたBELOW

MYコードです:私は間違って

package com.example.android.cebuano_tagalogtranslator; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends AppCompatActivity { 

    Button btn_clear; 
    Button btn_translate_to_ceb; 
    Button btn_translate_to_fil; 
    EditText txt_input; 
    EditText txt_output; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



     //HABAGAT CONTROLS BEGIN 
     btn_clear = (Button) findViewById(R.id.btn_clear); 
     btn_translate_to_ceb = (Button) findViewById(R.id.btn_trans_to_ceb); 
     btn_translate_to_fil = (Button) findViewById(R.id.btn_trans_to_fil); 

     txt_input = (EditText) findViewById(R.id.input); 
     txt_output = (EditText) findViewById(R.id.output); 

     //HABAGAT : CLEAR BOTH TEXT 
     btn_clear.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       txt_input.setText("type here"); 
       txt_output.setText(""); 
      } 
     }); 

     //HABAGAT : FILIPINO -> CEBUANO 
     btn_translate_to_ceb.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       try { 
        String textinput = txt_input.getText().toString(); 
        textinput = "\""+ textinput +"\""; 
        String filToCebQuery = "SELECT ceb FROM filtoceb WHERE fil = "+ textinput; 
        SQLiteDatabase DB = openOrCreateDatabase("filtoceb", MODE_PRIVATE, null); 
        //Cursor c = DB.rawQuery("SELECT * FROM filtoceb", null); 
        Cursor c = DB.rawQuery(filToCebQuery, null); 

        int cebIndex = c.getColumnIndex("ceb"); 
        //int filIndex = c.getColumnIndex("fil"); 

        c.moveToFirst(); 
        while (c != null) { 

        //Log.i("Results - ceb", c.getString(cebIndex)); 
        txt_output.setText(c.getString(cebIndex)); 
        c.moveToNext(); 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 

     //HABAGAT : CREATE DB OPEN IF NOT CREATED YET 
      try { 
      SQLiteDatabase eventsDB = this.openOrCreateDatabase("filtoceb", MODE_PRIVATE, null); 
      //eventsDB.execSQL("drop table user"); 
      eventsDB.execSQL("CREATE TABLE IF NOT EXISTS filtoceb (fil VARCHAR, ceb VARCHAR)"); 

      eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Kumusta ka?','Kumusta ka?')"); 
      eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Maayo, salamat', 'Mabuti naman, salamat')"); 
      eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Unsay imong pangalan?', 'Ano pangalan mo?')"); 
      eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Unsay ngalan mo?', 'ano pangalan mo?')"); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

何をしているのですか?

+2

'(C = nullを!)'ながら - という条件が本当に意味がありません。 'c'がnullの場合は、それがそこに到着する前にスローされます。ループを開始する前にヌルチェックを行います。次に、 'moveToFirst()'と 'moveToNext()'は 'Cursor'が動くことができるかどうかを示す' boolean'を返します。それらのループをベースにします。 –

答えて

2
int cebIndex = c.getColumnIndex("ceb"); 

if (cursor.moveToFirst()){ 
    while(!cursor.isAfterLast()){ 
     String data = cursor.getString(cebIndex); 
     // do what ever you want here 
     txt_output.setText(cursor.getString(cebIndex)); 
     cursor.moveToNext(); 
    } 
} 
cursor.close(); 
+0

エラーは発生しなくなりましたが、返すことができるのは自分のデータベースの最初のレコードですか?私は他の言葉を試しても、何も起こりませんし、ログエラーはありません? – royjavelosa

2
if (c!=null) 
    { 
     try { 
      c.moveToFirst(); 
      while(!c.isAfterLast()){ 
       String result = c.getString(c.getColumnIndex("ceb")); 
       txt_output.setText(result); 
       c.moveToNext(); 
       } 
      } 
     finally 
      { 
       cursor.close(); 
      } 
     } 
関連する問題