版本6和7中无法打开数据库
问题描述:
我有数据库问题。我的应用程序在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)
,请帮我解决问题
答
您所要求的权限,那么不管答案您尝试打开数据库,你需要有您的数据库开放代码的onPermissionsGranted(int code)
方法
嗨!如果你在代码堆栈中创建一个最小,完整和可验证的例子(http://*.com/help/mcve),以便将来可以在Stack溢出时使用,那将会更好。 -谢谢 – Momin