2017-06-06 73 views
0

我有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) 

` 我不知道的解決這個問題。請幫幫我。

回答

0

添加寫權限到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