2014-11-08 41 views
-2

我从谷歌播放得到一个错误。我想停止用户的崩溃,并向他显示消息或祝酒。应用程序必须继续前进,如果发生这种情况应用程序应该跳过这个或什么。只有一些设备得到这个错误。如何阻止这个sql io崩溃并通知用户?

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();    
    } 
+0

SQLiteDiskIOException与多个访问同时与数据库相关,一个线程尝试获取数据,而另一个尝试同时插入数据。引用从http://stackoverflow.com/questions/13975513/android-sqlitediskioexception-in-getreadabledatabase-native-setlocale-sqlite – 2014-11-08 06:48:49

+0

不,在代码中没有插入。只是访问只读。你能告诉我如何尝试赶上这个或当得到这个错误停止崩溃? – skk 2014-11-08 06:50:41

+0

请通过@almas shaikh查看下面的答案 – 2014-11-08 06:51:27

回答

0

处理异常使用try/catch块:

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

所以每当你的SQL的东西将要抛出任何异常,会处理它(而不是传播到调用方法),并且程序将像平常一样流动(除非你重新抛出catch块中的异常)