如何阻止这个sql崩溃并通知用户?

时间:2014-11-08 06:39:42

标签: java android sqlite android-sqlite

我收到了谷歌播放的错误。我想为用户停止崩溃,只是给他一个消息或祝酒。应用程序必须继续,如果这发生应用程序应跳过此或其他东西。只有部分设备会出现此错误。

android.database.sqlite.SQLiteDiskIOException: disk I/O error
at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:2075)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1014)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:962)
at offline.sinhaladic.com.MainActivity.searcc(MainActivity.java:1366)
at offline.sinhaladic.com.MainActivity$7.afterTextChanged(MainActivity.java:972)
at android.widget.TextView.sendAfterTextChanged(TextView.java:7678)
at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:8080)

这是我的searcc函数MainActivity.java:1366

public void searcc ()

  {               
      String myPath=Environment.getDataDirectory()+"/data/"+getPackageName()+"/"+"databases/cz";  
  EditText et=(EditText) findViewById(R.id.editText1);   
    SQLiteDatabase  cn = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
      String cnql = "SELECT DISTINCT english FROM jgd INDEXED BY eng WHERE english LIKE '"+et.getText().toString()+"%' LIMIT 0,30";  
        Cursor cg=cn.rawQuery(cnql, null);      
            if(cg.moveToFirst())
          {
                do {                            
                         sugenstrArr.add(cg.getString(0));  
                } while (cg.moveToNext());                   
                }   

            cg.close();
            cn.close();             
    }

1 个答案:

答案 0 :(得分:0)

使用try / catch块处理异常:

try {
    //do my sql stuff
} catch (SQLiteDiskIOException exception) {//or general like SQLiteException (which is not great)
    //handle your exception
}

所以每当你的sql东西要抛出任何异常时,你都会处理它(而不是传播给调用者方法)并且程序会正常流动(除非你在catch块中重新抛出异常)