Android Studio 使用Picasso框架加载图片(需要设置请求头)

在日常开发中,加载网络图片是一个常见的需求,而网上也有很多加载图片的框架,Picasso是目前比较流行的一款加载图片框架,它最简单的使用方法如下。

picasso.load(url).into(imageView);

但是这个请求url提交的请求与之前的请求就不在同一个会话上 ,如果我们需要让请求保持在同一个会话上,我们应该先定义个拦截器。该拦截器返回一个带Response,这个对象的请求头已经设置好我们想要的cookie了。

package com.zhang.oa.Interceptor;

import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;

import java.io.IOException;


public class RequestInterceptor implements Interceptor {

    String cookie = null;
    public RequestInterceptor(String cookie) {
        this.cookie = cookie;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request.Builder request = chain.request().newBuilder();
        request.addHeader("Cookie", cookie);
        return chain.proceed(request.build());
    }

}

接着在onCreate中编写代码实现网络图片的加载。

//加载网络图片
        final OkHttpClient okHttpClient = new OkHttpClient();
        //设置请求头,在同一个session
        okHttpClient.interceptors().add(new RequestInterceptor(getSharedPreferences("identify", Context.MODE_PRIVATE).getString("sessionId",null)));
        Picasso picasso = new Picasso.Builder(YZSQFJXQActivity.this).downloader(new OkHttpDownloader(okHttpClient)).build();
        picasso.load(url).into(imageView);

其中url为我们后端开发好的请求接口,imageView为前端的ImageView对象。 

有些时候,我们需要通过框架来获取图片的位图(Bitmap)进而可以进行文件的本地保存,Picasso框架也提供了这一功能,代码如下。

final OkHttpClient okHttpClient = new OkHttpClient();
        //设置请求头,在同一个session
        okHttpClient.interceptors().add(new RequestInterceptor(getSharedPreferences("identify", Context.MODE_PRIVATE).getString("sessionId",null)));
        final Picasso picasso = new Picasso.Builder(YZSQFJXQActivity.this).downloader(new OkHttpDownloader(okHttpClient)).build();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    //获取网络图片的位图
                    imageBitmap = picasso.load(url).get();
                    handler.sendEmptyMessage(0);
                }
                catch (Exception e){e.printStackTrace();}
            }
        }).start();

这样就可以获取网络资源的位图了,获取位图后可以调用ImageView中的setImageBitmap进行图片的设置。

handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                int tag = msg.what;
                switch (tag) {
                    //获取数据
                    case 0:
                        //设置位图
                        imageView.setImageBitmap(imageBitmap);
   
                        break;
                }
            }
        };

有了Bitmap后还可以进行图片的本地保存等功能。 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值