我要做的是打开一个图像,这个图像uri应该存储在我的本地数据库中,然后在我重新打开应用程序后,最后插入的图像会出现,但是当我重新打开应用程序时我遇到了问题图像未从数据库中的uri加载。
我的代码:
private static final int PICK_IMAGE = 100;
private ImageView imageView;
SQLiteDatabase DB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image_view);
DB = this.openOrCreateDatabase("test",MODE_PRIVATE,null);
DB.execSQL("CREATE TABLE IF NOT EXISTS users (uri VARCHAR)");
Cursor c = DB.rawQuery("SELECT * from users",null);
c.moveToLast();
int UriIndex = c.getColumnIndex("uri");
Uri image = Uri.parse(c.getString(UriIndex));
imageView.setImageURI(image);
Button pickImageButton = (Button) findViewById(R.id.pick_image_button);
pickImageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
openGallery();
}
});
}
private void openGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, PICK_IMAGE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == PICK_IMAGE) {
Uri imageUri = data.getData();
DB.execSQL("INSERT INTO users (uri) VALUES ('"+imageUri.toString()+"')");
imageView.setImageURI(imageUri);
}
}}
感谢。
答案 0 :(得分:0)
您从Uri
返回的ACTION_PICK
将持续与活动一样长的时间。您可以使用FLAG_GRANT_READ_URI_PERMISSION
和/或FLAG_GRANT_WRITE_URI_PERMISSION
来临时访问其他组件。但是the Uri
will be useless once your process ends,如果它有content
方案(并且大多数都会)。
如果您希望长期访问Uri
标识的内容:
使用ACTION_OPEN_DOCUMENT
和takePersistableUriPermissions()
作为the Storage Access Framework的一部分,或
将图片的本地副本制作到应用程序的内部存储空间