2017-08-04 87 views
2

我在做其中的数据是从database.But检索到的我得到它说如何解决java.lang.IllegalStateException?

java.lang.IllegalStateException错误的应用程序:无法从 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

的更改此代码:

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

到:

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

希望这将帮助你。

+0

谢谢....它的工作! – Qwerty

+0

请打勾我的答案,并upvote我的答案 –

0

根据当前实施CONFIG_ cursorWindowSize支持最大2 MB size.If行大小的超过那么就会抛出错误。

无论如何,在sqlite数据库中存储大数据并不是一个好主意。将文件存储在数据库的文件系统和路径中。

在数据库中占据很大的空间 - 难怪它无法获取它。大于2MB

0

openOrCreateDatabase(“Qwerty”,Context.MODE_PRIVATE,null);

您必须将保存的sqlite的路径定义为sd卡而不是“Qwerty”。

相关问题