Java 我想将图像另存为sqlite的路径并检索它,然后显示在ImageView上
这是我的密码:Java 我想将图像另存为sqlite的路径并检索它,然后显示在ImageView上,java,android,sqlite,Java,Android,Sqlite,这是我的密码: public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (resultCode != RESULT_OK) { return; } ImageButton imageButton = (ImageButton) textEntryView.findViewById(R.id.imageButton); imag
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (resultCode != RESULT_OK) {
return;
}
ImageButton imageButton = (ImageButton) textEntryView.findViewById(R.id.imageButton);
imageUri = data.getData();
showToast(imageUri.getPath());
public void setIvImg(String path) {
this.ivImg.setImageURI(Uri.fromFile(new File(path)));
}
PS:我已经使用了
READ\u EXTERNAL\u STORAGE
权限。下面是一个示例,它将路径存储在名为image\u path的表中的数据库(名为itdb),该表每行有两列\u id(一个rowid的别名,因此唯一地将一行标识为long)和图像路径,用于图像文件的实际路径
在本例中,为了简单起见(不需要权限),图像(一些JPG)已被放入assets文件夹中
应用程序启动时会查看资产并存储包含.JPG的资产文件路径(这里没有什么特别之处)。loadImagePaths方法可以做到这一点
- 注意:由于已使用唯一约束定义了图像\u路径列,因此将忽略现有图像(尽管会将异常写入日志)
- 一个用于填充ImageView的单击
- 另一个用于长单击,这将从数据库中删除条目,然后刷新列表视图。(重新运行应用程序将向数据库添加任何已删除的图像路径)
- MyenLinem20180927_Consumption.JPG
- MyenLinem20180927_Overview.JPG
- MyenLinem20180927_Production.JPG
- MyenLinem20180927_ProductionGridView.JPG
public类MainActivity扩展了AppCompatActivity{
字符串[]mAssetList;
字符串mPath=“”;
字符串mImageExtension=“.JPG”;
列表视图mLV;
图像视图mIV;
数据库助手mDBHlpr;
光标mCsr;
简单的mSCA;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLV=this.findViewById(R.id.listview);
mIV=this.findviewbyd(R.id.imageview);
mDBHlpr=新数据库助手(此);
loadImagePath();
handleListView();
}
/**
*显示、初始化或刷新ListView的句柄
*
*在初始化
*/
私有void handleListView(){
mCsr=mDBHlpr.getImageList();
如果(mSCA==null){
mSCA=新的SimpleCorsorAdapter(
这
android.R.layout.simple_list_item_1,mCsr,
新字符串[]{DatabaseHelper.IMAGEPATH\u COL\u PATH},
新int[]{android.R.id.text1},
0
);
mLV.setAdapter(mSCA);
mLV.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
displayImage(mCsr.getString(mCsr.getColumnIndex(DatabaseHelper.IMAGEPATH\u COL\u PATH));
}
});
setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView AdapterView,视图视图,int i,long l){
mDBHlpr.deleteMagePathById(l);
handleListView();//由于基础映像路径已被删除,请刷新Listview
返回true;//指示事件已被处理
}
});
}否则{
mSCA.斯瓦普库索公司(mCsr);
}
}
@凌驾
受保护的空onDestroy(){
mCsr.close();
super.ondestory();
}
私有void displayImage(字符串imagepath){
InputStream=null;
试一试{
is=this.getResources().getAssets().open(imagepath);
}捕获(IOE异常){
e、 printStackTrace();
}
位图图像=BitmapFactory.decodeStream(is);
试一试{
is.close();
}捕获(IOE异常){
e、 printStackTrace();
}
mIV.setImageBitmap(图像);
}
私有void loadImagePath(){
试一试{
MasseList=this.getAssets().list(mPath);
}捕获(IOE异常){
e、 printStackTrace();
返回;
}
用于(字符串s:MasseList){
如果(s.contains(mImageExtension)){
mDBHlpr.addImagePath(多个);
}
}
}
}
这演示了使用图像及其存储在数据库中的路径的基础知识
- 注意:如果使用上述方法,则必须将一些具有JPG扩展名的文件复制到assets文件夹中(除非更改代码以处理不同的位置)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FFAAAAFF"
/>
<ImageView
android:id="@+id/imageview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FFAAFFAA"
/>
</LinearLayout>
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DBNAME = "itdb";
public static final int DBVERSION = 1;
public static final String TBNAME = "image_path";
public static final String IMAGEPATH_COL_ID = BaseColumns._ID;
public static final String IMAGEPATH_COL_PATH = "image_path";
SQLiteDatabase mDB;
public DatabaseHelper(Context context) {
super(context, DBNAME, null, DBVERSION);
mDB = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
String crt_imagepath_table = "CREATE TABLE IF NOT EXISTS " + TBNAME + "(" +
IMAGEPATH_COL_ID + " INTEGER PRIMARY KEY, " +
IMAGEPATH_COL_PATH + " TEXT UNIQUE" +
")";
db.execSQL(crt_imagepath_table);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
}
public long addImagePath(String imagePath) {
ContentValues cv = new ContentValues();
cv.put(IMAGEPATH_COL_PATH,imagePath);
return mDB.insert(TBNAME,null,cv);
}
public int deleteImagePathById(long id) {
String whereclause = IMAGEPATH_COL_ID + "=?";
String[] whereargs = new String[]{String.valueOf(id)};
return mDB.delete(TBNAME,whereclause,whereargs);
}
public Cursor getImageList() {
return mDB.query(TBNAME,null,null,null,null,null,null);
}
}
public class MainActivity extends AppCompatActivity {
String[] mAssetList;
String mPath = "" ;
String mImageExtension = ".JPG";
ListView mLV;
ImageView mIV;
DatabaseHelper mDBHlpr;
Cursor mCsr;
SimpleCursorAdapter mSCA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLV = this.findViewById(R.id.listview);
mIV = this.findViewById(R.id.imageview);
mDBHlpr = new DatabaseHelper(this);
loadImagePaths();
handleListView();
}
/**
* Handle displaying the ListView, initialising it or refreshing it
*
* When initialising the
*/
private void handleListView() {
mCsr = mDBHlpr.getImageList();
if (mSCA == null) {
mSCA = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,mCsr,
new String[]{DatabaseHelper.IMAGEPATH_COL_PATH},
new int[]{android.R.id.text1},
0
);
mLV.setAdapter(mSCA);
mLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
displayImage(mCsr.getString(mCsr.getColumnIndex(DatabaseHelper.IMAGEPATH_COL_PATH)));
}
});
mLV.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
mDBHlpr.deleteImagePathById(l);
handleListView(); // Refresh Listview as underlying image path has been deleted
return true; // indicate event has been handled
}
});
} else {
mSCA.swapCursor(mCsr);
}
}
@Override
protected void onDestroy() {
mCsr.close();
super.onDestroy();
}
private void displayImage(String imagepath) {
InputStream is = null;
try {
is = this.getResources().getAssets().open(imagepath);
} catch (IOException e) {
e.printStackTrace();
}
Bitmap image = BitmapFactory.decodeStream(is);
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
mIV.setImageBitmap(image);
}
private void loadImagePaths() {
try {
mAssetList = this.getAssets().list(mPath);
} catch (IOException e) {
e.printStackTrace();
return;
}
for (String s: mAssetList) {
if (s.contains(mImageExtension)) {
mDBHlpr.addImagePath(s);
}
}
}
}