在Android应用程序开发中,将图片保存到数据库中是一项重要的任务。这项任务通常可以帮助我们提高应用程序的功能和性能。然而,实现这项任务并不是一件容易的事情,需要开发者具备一定的技能和知识。在本文中,我们将详细介绍如何将图片保存到数据库中,帮助大家更好地完成这项任务。
一、准备工作
在开始编写代码之前,我们需要进行一些准备工作。需要为Android应用程序创建一个数据库。可以利用Android系统自带的SQLite数据库来创建我们自己的数据库。连接SQLite数据库的更好方法是使用Android的OpenHelper类。在这里,我们将创建一个名为MyDatabaseHelper的类,以便在应用程序中使用。
“`
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_TABLE = “create table Image (“
+ “id integer primary key autoincrement, “
+ “name text, “
+ “image blob)”;
public MyDatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
“`
在这段代码中,我们创建了一个名为Image的表格,该表格包含三个字段:id、name和image。id字段是该表的主键,与其他字段相互关联。name字段是用于记录图像名称的字符串,而image字段是用于存储图像数据的二进制数据流。我们将在下面的代码中将图像存储为二进制数据流。
二、将图像数据存储到数据库中
当我们创建了数据库并确定了存储图像的方式之后,就可以开始将图像数据存储到数据库中了。在这里,我们将介绍一种将图像数据存储到数据库中的方法:
“`
public void insertImage(Bitmap bm, String name) {
SQLiteDatabase db = getWritableDatabase();
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
bm.compress(CompressFormat.JPEG, 100, os);
ContentValues values = new ContentValues();
values.put(“name”, name);
values.put(“image”, os.toByteArray());
db.insert(“Image”, null, values);
} finally {
db.close();
}
}
“`
在这段代码中,我们将图像数据存储在名为Image的表格中。我们首先从Bitmap对象中创建一个ByteArrayOutputStream对象。然后,我们使用compress()方法将Bitmap对象压缩成JPEG格式。接着,我们包装数据并将其插入到数据库中。我们关闭数据库连接。
三、从数据库中读取图像数据
如果我们需要从数据库中读取图像数据,可以使用以下代码:
“`
public Bitmap getImage(String name) {
SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.rawQuery(
“select * from Image where name=?”, new String[] { name });
if (cursor.moveToNext()) {
byte[] data = cursor.getBlob(2);
if (data != null) {
return BitmapFactory.decodeByteArray(data, 0, data.length);
}
}
cursor.close();
db.close();
return null;
}
“`
在这段代码中,我们从一个名为Image的表格中读取图像数据。我们从数据库中获取所有的行数据。然后,我们通过Cursor的getBlob()方法获取byte数组,并将其解码为Bitmap对象。
四、代码示例
下面是一个简单的Android应用程序,它可以将图像数据存储到一个SQLite数据库中,并从该数据库中读取该数据。
“`
public class MnActivity extends AppCompatActivity {
private ImageView imageView;
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mn);
dbHelper = new MyDatabaseHelper(this, “Image.db”, null, 1);
imageView = (ImageView) findViewById(R.id.imageView);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.test);
imageView.setImageBitmap(bitmap);
Button saveButton = (Button) findViewById(R.id.saveButton);
saveButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.insertImage(bitmap, “Test”);
}
});
Button loadButton = (Button) findViewById(R.id.loadButton);
loadButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bitmap = dbHelper.getImage(“Test”);
imageView.setImageBitmap(bitmap);
}
});
}
}
“`
在这段代码中,我们创建了一个名为Image.db的数据库,并通过MyDatabaseHelper类将其与应用程序关联。我们还创建了一个名为Test的图像,并将其压缩为JPEG格式。我们将图像数据插入到数据库中,并能够从该数据库中读取该数据。
结论
通过上述的介绍,相信大家对于如何在Android中实现将图片保存到数据库中已经有了一定的了解。我们需要为应用程序创建一个SQLite数据库,并确定如何存储图像数据。然后,我们可以通过将图像数据插入到数据库中,以及从数据库中读取该数据来实现该任务。在实际应用程序开发中,我们可以根据自己的需求和具体情况来选择使用不同的方法来存储图像数据。
相关问题拓展阅读:
android开发: EditText中插入的相册图片如何保存在数据库里,查看的时候又如何读取?
保存一旁数个url是个不错的方法,然后加载的时候就可以根据路径去生成一个bitmap对象,再把这个对象显示到组件上 。如盯空果知道路径,那么显示时调用BitmapFactory.decodeFile(String pathName)这个方法凯启瞎就行,参数为一个路径字符串.
你把图片枯型保存在拦老数据库里,之后操作不怕OOM么。。个人没衡猜觉得应该数据库放的是url,取出来之后去根据url去读取这个图片文件,动态生成一个bitmap显示就可以了。。
android 如何将drawable中的图片保存到系统相册中
调用你获取到的bitmap的compress方法. 把bitmap写到一个fileoutputstream中. 然后早念并通知MediaScannerService把高迹新保存的图片文件加入系统数陆迹据库中就可以了
android 将drawable中的图片保存到系统相轮枝姿册中的原理比较简单,获取到的bitmap,然后通过的compress方法写到一个fileoutputstream中. 再通知MediaScannerService有图片文件加入就可以了搭睁.
保存图片的核心代码如下:
Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.icon);
MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, name, “”);
或者
FileOutputStream fos = openFileOutput(“image”, Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
//发腊绝送系统通知消息
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(” + Environment.getExternalStorageDirectory())));
另一种方法是直接使用文件流读写:
InputStream is = mContext.getResources().openRawResource(PicID);
FileOutputStream fos = new FileOutputStream(LogoFilePath);
byte buffer = new byte;
int count = 0;
while((count=is.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
这里要注意目录权限问题:在应用程序AndroidManifest.xml中的manifest节点中加入android:sharedUerId=”android.uid.system”这个属性。然后放在源码环境中编译,并通过adb install 的方式进行安装。mk文件中的属性改为LOCAL_CERTIFICATE :=platform。
android保存图片到数据库中的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于android保存图片到数据库中,Android如何实现将图片保存到数据库中,android开发: EditText中插入的相册图片如何保存在数据库里,查看的时候又如何读取?,android 如何将drawable中的图片保存到系统相册中的信息别忘了在本站进行查找喔。