0
下面是我的代码,
问题描述:错误发生在db.execSQL声明说,空db对象。
我试着检查是什么错,并且应用了2个烤面包,找出“test”不显示,我的理解就是checkSelfPermission的判断是错误的,所以我已经有了权限。但是,如果我直接写db = SQLiteDatabase.openOrCreateDatabase(),它会有“未知错误(代码14):无法打开数据库”。
我真的没有线索,请帮助,在此先感谢。
ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
代码:
public class AbcActivity extends Activity {
SQLiteDatabase db;
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 111222:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
db = SQLiteDatabase.openOrCreateDatabase(Global.dataFolder + File.separator + "xxxxx", null);
else {
System.exit(0);
}
break;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_param);
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT).show();
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE))
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
111222);
else
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
111222);
}
Toast.makeText(getApplicationContext(), "test2", Toast.LENGTH_SHORT).show();
//db = SQLiteDatabase.openOrCreateDatabase(Global.dataFolder + File.separator + "xxxxx", null);
db.execSQL("create table if not exists " + "xxxxx" + "(" +
//<editor-fold desc="columns">
"DtdKink REAL," +
"TttBin REAL" +
//</editor-fold>
")");
}
}
你能解释一下什么是错的DB = SQLiteDatabase.openOrCreateDatabase说法吗?它在API 21上运行成功。我开始担心,既然你回答,人们会尽管回答,我会等待没有正确的答案。 I – caibirdcnb
openOrCreateDatabase(name,mode,factory)方法在Context类中,所以您应该使用基本活动SQLiteDatabase db = getActivity()。openOrCreateDatabase(“DATABASE”,android.content.Context.MODE_PRIVATE,null); –
对不起,我没有关注。正如我所提到的,代码在API 21上工作。看起来你应该修改db语句,但“test”不执行,意味着没有机会执行“db = SQLiteDatabase.openOrCreateDatabase”。这首先是一个逻辑问题。 – caibirdcnb