okhttp工具类请求图片

例:



加权限:

<uses-permission android:name="android.permission.INTERNET"/>


加依赖:

compile 'com.squareup.okhttp3:okhttp:3.9.0'



主方法类:

public class MainActivity extends AppCompatActivity {
    private String Strurl = "http://img.1985t.com/uploads/attaches/2017/12/141013-eSnS9sO.jpg";
    //使用封装的okhttp
    private OkHttpUtils okHttpUtils = new OkHttpUtils().getInstance();
    private Button btn;
    private ImageView img;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = findViewById(R.id.btn);
        img = findViewById(R.id.img);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {//Strurl是网址
                okHttpUtils.asyncJsonStringByURL2(Strurl, new OkHttpUtils.Func2() {
                    @Override
                    public void onResponse(byte[] result) {
                        Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
                        img.setImageBitmap(bitmap);
                    }
                });
            }
        });

//        //例:private String Path = "http://wangzhi。。。。";
//        //Path是网址
//        //通过textview来展示
//        //textview = findViewById(R.id.textview);
//        okHttpUtils.asyncJsonStringByURL(Path, new OkHttpUtils.Func1() {
//            @Override
//            public void onResponse(String result) {
//                textview.setText(result);
//            }
//        });
    }
}


activity_main  布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btn"
        android:text="点击"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="13dp" />
    <ImageView
        android:id="@+id/img"
        android:layout_width="300dp"
        android:layout_height="400dp"
        android:layout_below="@+id/btn"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="12dp" />
</RelativeLayout>


OkHttpUtils 类:

public class OkHttpUtils {
    //定义成员变量
    private final OkHttpClient mClient;
    private static Handler mHandler = null;
    private static OkHttpUtils sUtils;
    //使用构造方法,完成初始化
    OkHttpUtils(){
        mClient = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)//设置的链接的超时时间
                .readTimeout(10,TimeUnit.SECONDS)//设置读取超时时间
                .writeTimeout(10,TimeUnit.SECONDS)//设置写入超时时间
                .build();
        mHandler = new Handler();
    }
    /**
     * 设置外部调用方法
     *使用单利模式,暴露一个方法,给外界提供一个对象
     * @return
     */
    public static OkHttpUtils getInstance(){
        if (sUtils == null){
            sUtils = new OkHttpUtils();
        }
        return sUtils;
    }
    ////定义接口
    interface Func1{
        void onResponse(String result);
    }
    interface Func2{
        void onResponse(byte[] result);
    }
    interface Func3{
        void onResponse(JSONObject jsonObject);
    }

    ///////////////////////Func2图片///////////////////////////////////////
    //是编写代码运行到主线程
    //处理网路请求成功的方法,返回的结果是Json字符串
    private static void onSuccessJsonStringMethod(final byte[] result,final Func2 callBack){
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                if (callBack != null){
                    callBack.onResponse(result);
                }
            }
        });
    }
    //暴露给外界调用的方法
    /**
     * 请求指定的URL,返回的结果是Json字符串
     */
    public void asyncJsonStringByURL2(String url, final Func2 callBack){
        final Request request = new Request.Builder().url(url).build();
        mClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                onSuccessJsonStringMethod(response.body().bytes(),callBack);
            }
            @Override
            public void onFailure(Call call, IOException e) {
            }
        });
    }

    ///////////////////////Func1文字///////////////////////////////////////
    //是编写代码运行到主线程
    //处理网路请求成功的方法,返回的结果是Json字符串
    private static void onSuccessJsonStringMethod(final String jsonValue,final Func1 callBack){
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                if (callBack != null){
                    callBack.onResponse(jsonValue);
                }
            }
        });
    }
    //暴露给外界调用的方法
    /**
     * 请求指定的URL,返回的结果是Json字符串
     */
    public void asyncJsonStringByURL(String url, final Func1 callBack){
        final Request request = new Request.Builder().url(url).build();
        mClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                onSuccessJsonStringMethod(response.body().string(),callBack);
            }
            @Override
            public void onFailure(Call call, IOException e) {
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/jun_tong/article/details/80515032
今日推荐