Android加载用户头像的功能实现

本文介绍了在Android应用中如何加载用户头像,首先检查本地是否有存储,如有则直接读取,否则从服务器下载并保存至本地。在Fragment的onCreateView()调用initData(),通过getDataFromServer()使用HttpUtil工具类请求服务器数据。当获取到用户信息后,用Gson转换并更新界面。为防止内存溢出,头像使用压缩后的Bitmap,并通过ImageUtils类进行处理。服务器返回的图片字节数组会被转换为Bitmap并保存到SD卡,便于下次直接读取。
摘要由CSDN通过智能技术生成

加载用户头像的过程是,首先从本地查看是否存储了用户的头像,如果有,则从本地读取后加载到ImageView中,如果没有,则去服务器下载头像保存到本地,并加载。

public void initData() {
   
        super.initData();
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MyApplication.getContext());
        final String u_id = pref.getString("u_id", "");
        // 联网请求个人中心的数据
        getDataFromServer(u_id);
    }

在Fragment的onCreateView()中调用initData()方法,该方法使用用户的id去联网请求个人中心的数据。

private void getDataFromServer(String u_id) {
   
        String address = Constant.PERSONAL_CENTER_URL;
        HttpUtil.sendPostRequest(address, u_id, new Callback() {
   
            @Override
            public void onFailure(Call call, IOException e) {
   

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
   
                if (null == response.body()) {
   
                    return;
                }

                String responseText = URLDecoder.decode(response.body().string(), "utf-8");
                // 解析数据
                processData(responseText);
            }
        });
    }

在 getDataFromServer()方法中调用了自己写的HttpUtil工具类中的方法去请求服务器数据。这个HttpUtil的方法如下(使用前需在gradle文件中引入okhttp3):

public class HttpUtil {
   
	public static void sendPostRequest(String address, String json, okhttp3.Callback callback) {
   
	        OkHttpClient client = new OkHttpClient();
	        RequestBody requestBody = RequestBody.create(JSON, json);
	        Request request = new Request.Builder().url(address).post(requestBody).build();
	        client.newCall(request).enqueue(callback);
	    }
}

下面进入解析数据的部分,取出客户端返回的数据,用Gson转换为PersonMsg对象后取出User,用这个User中的数据来更新界面。从User中取出用户id,利用id去sd卡中获取到压缩后的Bitmap位图(这里是个大坑,不压缩很容易造成内存溢出OOM的错误,填坑请看我另一篇博文:解决使用Bitmap造成OOM内存溢出的问题)。如果取出的Bitmap不为空,则表示从本地加载到了用户头像,否则就从服务器请求头像数据。

    private void processData(String response) {
   
        final PersonMsg personMsg = Utility.handlePersonMsgResponse(response);
        if (null == personMsg) {
   
            return;
        }

        final User user = personMsg.getUser();

        // 更新界面
        if (getActivity() == null) {
   
            return;
        }

        final Bitmap bitmap = ImageUtils.getPhotoFromStorage(user.getU_id());
        if (bitmap != null) {
   
            getActivity().runOnUiThread(new Runnable() {
   
                @Override
                public void run() {
   
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值