Android实现点击图片上传SQLite数据库
作者:Awesome_lay 发布时间:2021-06-23 04:35:50
标签:Android,上传,SQLite
在使用各类App的时候,尤其是在发布朋友圈、微博的时候,都会选择配图,进入手机相册,选择自己想要的照片,作为发布内容的一部分,这里就简单介绍一下点击图片上传的方法。
1、动态获取权限
在Android 6.0之后,除了在清单文件中声明权限之外,通常做的还有就是动态申请权限。
//从手机相册中获取图片需要动态申请权限
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},ALBUM_CODE);
}else{
//如果已经获取权限,那么就直接拿
takePhoto();
}
//权限申请回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case ALBUM_CODE:
//获取照片
takePhoto();
break;
}
}
2、跳转到相册,选择照片
private void takePhoto() {
Intent intent = new Intent(Intent.ACTION_PICK,null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent,ALBUM_CODE);
}
涉及到的隐式跳转的Action是ACTION_PICK,通过带结果的回调startActivityForResult,将图片信息带回。
3、处理图片数据,显示在ImageView。
//从相册返回的回调
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case ALBUM_CODE:
Uri uri = data.getData();
if(uri != null){
// 将图片显示在ImageView
iv_goods.setVisibility(View.VISIBLE);
//
Glide.with(this).load(uri).into(iv_goods);
}
break;
}
将图片显示在ImagView中后,如果想要将图片保存在数据库,需要做一系列的转换。
首先,SQLite数据库支持的数据类型包括:int、String、text、Blob,其中Blob就是在存储图片等多媒体的时候,使用的类型。
其实Blob可以支持多种输入类型,像图片这类的资源,通常需要转换为字节流,采用byte数组来存储,因此在SQLite中,也可以使用byte数组来存储图片,因此需要将Drawable类型的图片转换为byte数组。
//Drawable对象转换为byte数组
public static byte[] getBytes(Drawable drawable){
//将Drawable对象转换为bitmap对象
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
//创建输出字节流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
//压缩
bitmap.compress(Bitmap.CompressFormat.PNG, 1, bos);
return bos.toByteArray();
}
我这边用的是Room组件
@ColumnInfo(name = "drawable")
private byte[] drawable;
在获取图片资源的时候,获取byte数组,将其转换为Bitmap或者Drawable,就可以取出照片显示。
//byte数组转换为Bitmap
public static Bitmap getBitmap(byte[] bytes){
//BitmapFactory
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return bitmap;
}
来源:https://blog.csdn.net/qq_33235287/article/details/106128229


猜你喜欢
- 前言任何使用过基于 Java 的企业级后端应用的软件开发者都会遇到过这种低劣、奇怪的报错,这些报错来自于用户或是测试工程师: java.la
- 工具栏:就是上面有个好多的快捷按钮的那个栏,比如撤销,上传,下载设置,扳手按钮,等等。目录栏:就是刚刚装的时候,这个会显示,但是不知道怎么关
- 本文实例讲述了C#图形区域剪切的实现方法。分享给大家供大家参考。具体如下:using System;using System.Collect
- 【一】常见用法最原始的用法,耦合度低,但是不能统一管理。我们需要在每一个控制器都写以下代码,很繁琐,以后项目修改起来更繁琐,得一个控制器一个
- 在常见场景下:返回数据建议使用map,不建议使用实体对象 /** * 1. 名字包含雨并且年龄小于40  
- 本文实例为大家分享了Android绘制钟表的具体代码,供大家参考,具体内容如下首先要画一个表,我们要先知道步骤如何:1、仪表盘----外面最
- 一、Intent的用途Intent主要有以下几种重要用途: 1. 启动Activity:可以将Intent对象传递给startActivit
- 1. 前言Spring最重要的一个概念当属Bean了,我们写的Controller、Service、Dao凡是加了对应注解交给Spring管
- 最近做了一个功能,里面涉及到了渐变圆形的需求。就是一个颜色可以渐变的圆环,最后实现的效果如下图:左图是带渐变效果,右图是不带渐变效果。原理还
- 错误处理到目前为止,我们都没怎么介绍onComplete()和onError()函数。这两个函数用来通知订阅者,被观察的对象将停止发送数据以
- 因项目集成了Redis缓存部分数据,需要在程序启动时将数据加载到Redis中,即初始化数据到Redis。在SpringBoot项目下,即在容
- 一.摘要emmmm..对springmvc不太熟练的情况下,如果不出意外的话,项目启动后出现404页面是很烦人。在这里,我记录一下可能会导致
- 1、存储在App内部最简单的一种。在尝试过程中发现,手机中很多文件夹都没有权限读写。我们可以将我们需要写的文件存放到App中的files文件
- 一、Hadoop的安装1. 下载地址:https://archive.apache.org/dist/hadoop/common/我下载的是
- rocketmq client 日志的问题处理使用rocketmq后,默认会在{user.home}\logs\rocketmqlogs 目
- 本文实例为大家分享了java实现二叉树遍历的具体代码,供大家参考,具体内容如下二叉树如下:遍历结果如下:以下是实现代码:package bi
- StringDictionary:默认key不区分大小写 NameValueCollection:默认key区分大小写 KeyedColle
- 计数排序是非比较的排序算法,用辅助数组对数组中出现的数字计数,元素转下标,下标转元素计数排序优缺点优点:快缺点:数据范围很大,比较稀疏,会导
- 目录断言对象、数组、集合ObjectUtilsStringUtilsCollectionUtils文件、资源、IO 流FileCopyUti
- 一、枚举类类的对象只有有限个, 确定的. 我们称此类为枚举类.说明:1.类的对象只有有限个,确定的。如:星期:Monday(星期一)、…、S