2017-06-06 24 views
-1

我有數據庫問題。我的應用程序在6版之前無誤地運行。但在運行6或7的Android版本不工作,當stop.my代碼:版本6和7中無法打開數據庫

public class MainActivity extends RuntimePermissionsActivity { 
    private final int WRITE_EXTERNAL_REQUEST_CODE = 30; 
    private final int READ_EXTERNAL_REQUEST_CODE = 80; 

    @Override 
    public void onPermissionsGranted(int requestCode) { 
     if (requestCode == READ_EXTERNAL_REQUEST_CODE) 
      Toast.makeText(getApplicationContext(), "permission", Toast.LENGTH_LONG).show(); 
     else if (requestCode == WRITE_EXTERNAL_REQUEST_CODE) 
      Toast.makeText(getApplicationContext(), " permission", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onPermissionsDeny(int requestCode) { 
     Toast.makeText(getApplicationContext(), "not permission", Toast.LENGTH_LONG).show(); 
    } 

    public static SQLiteDatabase database; 
    public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    public static final String DIR_DATABASE = DIR_SDCARD + "/database-shopping";public class MainActivity extends RuntimePermissionsActivity { 
    public static int numPermission=1; 
    private final int WRITE_EXTERNAL_REQUEST_CODE = 30; 
    private final int READ_EXTERNAL_REQUEST_CODE = 80; 

    @Override 
    public void onPermissionsGranted(int requestCode) { 
     if (requestCode == READ_EXTERNAL_REQUEST_CODE) 
      Toast.makeText(getApplicationContext(), "",Toast.LENGTH_LONG).show(); 
     else if (requestCode == WRITE_EXTERNAL_REQUEST_CODE) 
      Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onPermissionsDeny(int requestCode) { 
     Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show(); 
    } 

    public static SQLiteDatabase database; 
    public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    public static final String DIR_DATABASE = DIR_SDCARD + "/database-shopping"; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
      MainActivity.super.requestAppPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, WRITE_EXTERNAL_REQUEST_CODE); 
       new File(DIR_DATABASE).mkdirs(); 
       database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/shopping.sqlite", null); 
       database.execSQL("CREATE TABLE IF NOT EXISTS person (person_name TEXT NOT NULL ," + 
         "person_email TEXT NOT NULL ," + 
         " person_password TEXT NOT NULL )"); 

和錯誤顯示,6或7版本上運行:

06-06 07:07:18.152 2391-2391/? E/SQLiteDatabase: Failed to open database '/storage/emulated/0/database-shopping/shopping.sqlite'. 
                  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.myapplication.MainActivity.onCreate(MainActivity.java:398) 



06-06 07:07:18.152 2391-2391/? E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: com.example.khatere.myapplication, PID: 2391 
                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.khatere.myapplication/com.example.khatere.myapplication.MainActivity}: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 

,請幫我解決問題

+0

嗨!如果你在代碼堆棧中創建一個最小,完整和可驗證的例子(http://stackoverflow.com/help/mcve),以便將來可以在Stack溢出時使用,那將會更好。 -謝謝 – Momin

回答

0

您所要求的權限,那麼不管答案您嘗試打開數據庫,你需要有您的數據庫開放代碼的onPermissionsGranted(int code)方法