android无法打开数据库

问题描述:

我有Android的工作数据库的问题。 android无法打开数据库。我的应用程序只有这个类和mainActivity类。 我的代码是: `android无法打开数据库

public class G { 
public static Context  context; 
public static SQLiteDatabase database; 
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath(); 
public static final String DIR_DATABASE = DIR_SDCARD + "/database-test"; 
@Override 
public void onCreate() { 
    super.onCreate(); 
    context = this.getApplicationContext(); 
    // new File(DIR_DATABASE).mkdirs(); 
    File file=new File(DIR_DATABASE); 
    file.mkdirs(); 
    database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/database.sqlite", null); 
    database.execSQL("CREATE TABLE IF NOT EXISTS person (person_name TEXT NOT NULL ," + 
       " person_family TEXT NOT NULL , " + 
       " person_password TEXT NOT NULL )"); 
} 

and this error is:

06-06 19:44:23.978 24284-24284/com.example.khatere.mydatabasetests E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.example.khatere.mydatabasetests, PID: 24284 
                        java.lang.RuntimeException: Unable to create application com.example.khatere.mydatabasetests.G: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
                         at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5406) 
                         at android.app.ActivityThread.-wrap2(ActivityThread.java) 
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545) 
                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                         at android.os.Looper.loop(Looper.java:154) 
                         at android.app.ActivityThread.main(ActivityThread.java:6119) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
                         Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
                         at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 
                         at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209) 
                         at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 
                         at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 
                         at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 
                         at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 
                         at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:808) 
                         at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:793) 
                         at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:696) 
                         at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:711) 
                         at com.example.khatere.mydatabasetests.G.onCreate(G.java:29) 
                         at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024) 

` 我不知道的解决这个问题。请帮帮我。

添加写权限到Android清单

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

如果您正在运行您的API级别23或更高的应用程序,你必须在运行时请求权限。

请求权限:

String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE}; 
requestPermissions(permissions, WRITE_REQUEST_CODE); 

然后处理结果:

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case WRITE_REQUEST_CODE: 
     if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
      //Granted. 
      //Continue with the database process 

     } 
     else{ 
      //Denied. 
     } 
     break; 
    } 
} 

欲了解更多信息,请访问Requesting Permissions at Run Time - Android Doc

+0

我已经添加此权限,但错误不去 – sonia

+0

你运行你的应用程序Android的棉花糖或更高版本(API等级23或更高)?也许是因为新的实时权限 – fn5341

+0

是的我在API 24上运行应用程序和25 – sonia