Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决java.lang.IllegalStateException?_Java_Android_Cursor - Fatal编程技术网

如何解决java.lang.IllegalStateException?

如何解决java.lang.IllegalStateException?,java,android,cursor,Java,Android,Cursor,我正在制作一个从数据库中检索数据的应用程序。但是我得到一个错误,上面说 java.lang.IllegalStateException:无法从中读取第6行第6列 游标窗口。在开始之前,请确保光标已正确初始化 从中访问数据 请帮助我找到解决方案,因为我无法得到它。我还附加了Java文件 public class QuizActivity extends AppCompatActivity { TextView tv, tv1; RadioGroup rg; Button btn; SQLiteDa

我正在制作一个从数据库中检索数据的应用程序。但是我得到一个错误,上面说

java.lang.IllegalStateException:无法从中读取第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;
}}
公共类quizaActivity扩展了AppCompative活动{
TextView电视,tv1;
放射组rg;
按钮btn;
sqlitedatabasesqldb;
光标c;
int分数、nscore、问题;
字符串n;
int数组[]=新的int[11];
私有静态最终字符串x=“从问题中选择*”;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.quick_活动);
tv=(TextView)findViewById(R.id.textView4);
tv1=(TextView)findViewById(R.id.textView9);
rg=(放射组)findViewById(R.id.rg);
btn=(按钮)findViewById(R.id.button2);
Bundle data=getIntent().getExtras();
如果(数据!=null){
n=data.getString(“名称:”);
}
openDatabase();
c=sqldb.rawQuery(x,null);
c、 moveToFirst();
getQuestion();
tv1.setText(“分数:0”);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int res=rg.getCheckedRadioButtonId();
开关(res){
案例0:
案例1:
案例2:
案例3:
打破
违约:
Toast.makeText(getApplicationContext(),“至少选择
任何人选项!”,Toast.LENGTH\u LONG.show();
返回;
}
if(res==Integer.parseInt(c.getString(6))){
Toast.makeText(getApplicationContext(),“正确答案!”,Toast.LENGTH\u LONG.show();
分数+=nscore;
tv1.setText(“分数:+nscore”);
}否则{
Toast.makeText(getApplicationContext(),“回答不正确!”,Toast.LENGTH_LONG.show();
}
Toast.makeText(getApplicationContext(),“您已经完成了测试!”,Toast.LENGTH\u LONG.show();
Intent i=新Intent(getApplicationContext(),FinialActivity.class);
i、 putExtra(“名称:”,n);
i、 putExtra(“分数:”,分数);
星触觉(i);
}
});
}
受保护的void openDatabase(){
sqldb=openOrCreateDatabase(“Qwerty”,Context.MODE_PRIVATE,null);
}
受保护的ArrayListgetQuestion(){
最终字符串表\u name=“问题”;
String SelectQuery=“SELECT*FROM”+表格名称;
MyHelper help=新的MyHelper(getApplicationContext());
sqldb=help.getReadableDatabase();
sqldb=help.getWritableDatabase();
c=sqldb.rawQuery(SelectQuery,null);
ArrayList数据=新的ArrayList();
如果(c!=null){
if(c.moveToFirst()){

对于(int i=0;i根据当前的实现配置,cursorWindowSize支持最大2 MB大小。如果行大小超过,则将抛出错误

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


在数据库中保存一个大文件-难怪它无法获取它。大于2MB的文件更改代码如下:

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

希望这对您有所帮助。

openOrCreateDatabase(“Qwerty”,Context.MODE\u PRIVATE,null)


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

这意味着您的查询不会返回7行或7列
sqldb=help.getWritableDatabase();
 sqldb=help.getReadableDatabase();