Android记一次头像上传与显示
来源:互联网 发布:淘宝双面绸缎丝带 编辑:程序博客网 时间:2024/06/01 20:33
概述
本文主要内容
- 前提
- 头像上传
- 头像显示
- 关键代码
- 踩坑指南
前提
1.用户登录后将用户数据存到本地Sqlite数据库,即User表.
2.Sdcard中test目录下的avatar.jpg文件,该文件用于下面的头像上传和显示。
头像上传
1.需要将本地图片文件转换成Base64编码
2.将剪裁后的图片替换test文件夹下的avatar.jpg,上传服务器成功后,服务器会返回头像文件在服务器上的路径,将此路径存到本地User表中,并加载本地头像文件;若上传服务器失败则删除该文件,防止下次加载头像会加载上传失败的图片。
头像显示
先判断test文件夹下的avatar.jpg文件是否存在,如果存在则调用相关方法直接加载显示在ImageView上即可;如果不存在,则先从服务器上下载到Scard中的test下,取名avatar.jpg,然后调用相关方法显示即可。这样做可防止本地头像文件被意外删除后显示不出来的问题。
关键代码
1.请求服务器的方法(使用的是Retrofit+RxJava),因为默认的POST请求有长度限制,所以要使用@FormUrlEncoded属性
@FormUrlEncoded @POST("app/my/upload_avatar") Observable<RootBean> uploadAvatar( @Field("app_key") String app_key, @Field("userid") Integer userid, @Field("avatar") String avatar);
2.将文件转成Base64编码的工具类
/** * 图片转化成base64字符串 * @param path 图片路径 * @return Base64编码 */ public static String FileToBase64(String path) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 InputStream in = null; byte[] data = null; // 读取图片字节数组 try { in = new FileInputStream(path); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data);// 返回Base64编码过的字节数组字符串 }
3.使用Glide加载本地图片
/** * 加载本地图片,并且不使用任何缓存 * * @param context 上下文 * @param path 本地图片路径 * @param drawable_id 默认图 * @param iv ImageView控件 */ public static void getSdcardImage(Context context, String path, int drawable_id, ImageView iv) { Drawable lDrawable = ResourcesCompat.getDrawable(context.getResources(), drawable_id, null); File file = new File(path); Glide.with(context) .load(file) .centerCrop() .error(lDrawable)//加载出错 .skipMemoryCache(true)//跳过内存缓存 .diskCacheStrategy(DiskCacheStrategy.NONE)//不使用硬盘缓存 .into(iv); }
踩坑指南:
W/System.err: retrofit2.adapter.rxjava.HttpException: HTTP 414 Request-URI Too Large
1.因@POST方法请求长度限制引发的错误,解决: 请求方法上添加@FormUrlEncoded,并指定请求方法中的参数为 @Field(“app_key”) String app_key,否则会引起下面的错误。
Caused by: java.lang.IllegalArgumentException: Form-encoded method must contain at least one @Field.
2.参考错误1
阅读全文
0 0
- Android记一次头像上传与显示
- android头像上传功能
- android上传头像
- android 上传头像
- 转:Android上传头像
- android 上传头像
- android 选择头像上传
- Android 上传头像
- Android头像上传
- android裁剪头像上传
- Android模拟上传头像
- android 上传头像
- android头像上传
- Android上传头像功能
- Android头像--拍照上传
- Android之头像上传
- Android更换头像上传
- 【ECSHOP插件】ECSHOP会员头像,上传头像评论显示头像
- codeforces 279C Ladder(数据技巧)
- JavaWeb 实现Excel 的导入导出
- excel导出(检索com类工厂中)8007005
- flex详解
- Android 流式布局之自动换行
- Android记一次头像上传与显示
- Codeforces 831 B Keyboard Layouts
- java学习【web基础-jQuery】
- Pointer Networks 理解
- JQuery中$.ajax()方法参数详解
- 教育网CERNET八大主干节点及地区节点
- 简述AIDL通信的使用
- redis的主从复制,读写分离,主从切换 ,哨兵
- PL/SQL快捷键