这是个人第一篇博文,请你们多多指教!
大概一个月以前,在跟朋友合做开发一个APP的过程当中,咱们发现到一个问题:图片的存储。由于数据库没有图片这种数据类型,当用户上传的图片须要存储的时候,咱们没法将其直接放进数据库中。
在经历了几天的探索,结合郭神的《第二行代码》调用摄像头拍照以及从相册中选择图片这两小节,咱们发现了Android里面的一个图片类:Bitmap。最终发现,利用Bitmap及其相关的工具类便可实现图片的存储以及显示。 java
主要用到的工具类:android
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Base64; import java.io.ByteArrayOutputStream; /** * Created by cartoon on 2017/12/9. */ public class StringAndBitmap { //图片与String之间的转换,便于将图片存储在数据库中 private Bitmap bitmap; private String string; public Bitmap stringToBitmap(String string){ //数据库中的String类型转换成Bitmap if(string!=null){ byte[] bytes= Base64.decode(string,Base64.DEFAULT); bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length); return bitmap; } else { return null; } } public String bitmapToString(Bitmap bitmap){ //用户在活动中上传的图片转换成String进行存储 if(bitmap!=null){ ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] bytes = stream.toByteArray();// 转为byte数组 string=Base64.encodeToString(bytes,Base64.DEFAULT); return string; } else{ return ""; } } }
下面已经获取到数据库中已经存储了的图片的String语句string,只须要在须要显示图片的组件中调用关于显示Bitmap的方法便可。数据库
imageView.setImageBitmap(stringAndBitmap.stringToBitmap(string); //这里的imageView为页面组件绑定的ID,string为从数据库获取到图片的string形态
而存储用户上传的图片则须要这样便可。数组
bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap(); string=stringAndBitmap.bitmapToString(bitmap);
通过一些数据库的操做,便可以把用户上传的图片存入到数据库中。
由于数据库部分不是我负责的,因此个人建议是数据库中的类型选择BLOB(MySQL),由于已经实现过是可行的。
以上就是以前开发的一点小技巧,也是通过痛才领会出来的。咱们尚未测试过资源的消耗以及延时的状况,但确实是能够存储图片到数据库中的。
若是大家有任何对这篇博文的建议或者意见的话,欢迎私信或者在下方评论。最重要的是能够帮助到像咱们同样的入门者。工具