2017-08-04 88 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」。

相關問題