2017-08-04 43 views
2

私はデータは、私がjava.lang.IllegalStateExceptionを解決するにはどうすればいいですか?

java.lang.IllegalStateExceptionというエラーを取得していますdatabase.Butから取得されたアプリを作っています: CursorWindowから行6、列6を読み取れませんでした。 からデータにアクセスする前に、カーソルが正しく初期化されていることを確認してください。

私がそれを得ることができないので、解決策を見つけるのに親切に助けてください。また、私はJavaファイルを添付しています。

public class QuizActivity extends AppCompatActivity { 
TextView tv, tv1; 
RadioGroup rg; 
Button btn; 
SQLiteDatabase sqldb; 
Cursor c; 
int score, nscore,question; 
String n; 
int array[]=new int[11]; 
private static final String x="SELECT * FROM questions"; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.quiz_activity); 
    tv = (TextView) findViewById(R.id.textView4); 
    tv1 = (TextView) findViewById(R.id.textView9); 
    rg = (RadioGroup) findViewById(R.id.rg); 
    btn = (Button) findViewById(R.id.button2); 
    Bundle data = getIntent().getExtras(); 
    if (data!=null){ 
     n = data.getString("Name:"); 
    } 
    openDatabase(); 
    c = sqldb.rawQuery(x,null); 
    c.moveToFirst(); 
    getQuestion(); 
    tv1.setText("Score:0"); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int res = rg.getCheckedRadioButtonId(); 
      switch (res) { 
       case 0: 
       case 1: 
       case 2: 
       case 3: 
        break; 
       default: 
        Toast.makeText(getApplicationContext(), "Select atleast 
     anyone option!", Toast.LENGTH_LONG).show(); 
        return; 
      } 
      if (res == Integer.parseInt(c.getString(6))) { 
       Toast.makeText(getApplicationContext(), "Correct answer!", Toast.LENGTH_LONG).show(); 
       score += nscore; 
       tv1.setText("Score:" + nscore); 
      } else { 
       Toast.makeText(getApplicationContext(), "Incorrect answer!", Toast.LENGTH_LONG).show(); 
      } 
      Toast.makeText(getApplicationContext(), "You have completed your quiz!", Toast.LENGTH_LONG).show(); 
      Intent i = new Intent(getApplicationContext(), FinialActivity.class); 
      i.putExtra("Name:", n); 
      i.putExtra("Score:", score); 
      startActivity(i); 
     } 
    }); 
} 


protected void openDatabase() { 
    sqldb = openOrCreateDatabase("Qwerty", Context.MODE_PRIVATE, null); 
} 
protected ArrayList<String>getQuestion() { 
    final String Table_name="questions"; 
    String SelectQuery="SELECT * FROM "+Table_name; 
    MyHelper help = new MyHelper(getApplicationContext()); 
    sqldb=help.getReadableDatabase(); 
    sqldb=help.getWritableDatabase(); 
    c=sqldb.rawQuery(SelectQuery,null); 
    ArrayList<String> data= new ArrayList<>(); 
    if (c !=null){ 
     if (c.moveToFirst()){ 
      for (int i=0;i<c.getCount();i++){ 
       data.add(c.getString(i)); 
       c.moveToNext(); 
      } 
     } 
     c.close(); 
    } 
    return data; 
}} 
+0

これは、クエリが7つの行または列を返さないことを意味します –

答えて

0

変更するには、このコードからより大きい。

+0

ありがとう....それは働いた!!!! – Qwerty

+0

私の答えをチェックし、私の答えをupvoteしてください –

0

現在実施CONFIG_によれば、2メガバイトsize.If行サイズのcursorWindowSize支持最大値は、それがエラーをスローします超えます。

大規模なデータをsqliteデータベースに格納するのは良い方法ではありません。ファイルをファイルシステムに保存し、データベースのパスを保存します。

大きなデータベースを保持しています。それを取得できないのは不思議ではありません。

sqldb=help.getReadableDatabase(); 
sqldb=help.getWritableDatabase(); 

へ:これはあなたを助けるでしょう

sqldb=help.getWritableDatabase(); 
sqldb=help.getReadableDatabase(); 

・ホープ2メガバイト

0

openOrCreateDatabase( "Qwerty"、Context.MODE_PRIVATE、null);

"Qwerty"の代わりに保存したsqliteのパスをsd-cardに定義する必要があります。

関連する問題