19软件2班 okhttp

19软件2班 okhttp

添加依赖

implementation 'com.squareup.okhttp3:okhttp:3.10.0'

异步请求

 // okhttp的异步get请求
    private void useAsynGet() {
        OkHttpClient okHttpClient = new OkHttpClient();
        String url = "http://www.qq.com";
        Request request = new Request.Builder().url(url).get().build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("useAsynGet", e.toString());
            }

            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException {
                String content = response.body().string();
                Log.e("useAsynGet",content);
                // 不能直接调用  现在还是在子线程
                // tv_show.setText(content);
            }
        });
    }

同步请求

 // okhttp的同步get请求
    private void useSyncGet() {
        OkHttpClient okHttpClient = new OkHttpClient();
        String url = "http://www.qq.com";
        Request request = new Request.Builder().url(url).get().build();
        Call call = okHttpClient.newCall(request);
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    okhttp3.Response response = call.execute();
                    String content = response.body().string();
                    Log.e("useSyncGet", content);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

将内容显示在屏幕上

使用消息机制
在这里插入图片描述

// okhttp的异步get请求
    private void useAsynGet() {
        OkHttpClient okHttpClient = new OkHttpClient();
        String url = "http://www.qq.com";
        Request request = new Request.Builder().url(url).get().build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("useAsynGet", e.toString());
            }

            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException {
                String content = response.body().string();
                Log.e("useAsynGet",content);
                // 不能直接调用  现在还是在子线程
                // tv_show.setText(content);

                // 发消息到主线程
                Message message = new Message();
                message.what = MSG_WEB_CONTENT;
                message.obj = content;
                myHandler.sendMessage(message);
            }
        });
    }

初始化Handler 处理消息
  // 初始化Handler
    private void initHandler() {
        myHandler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(@NonNull Message msg) {
                if(msg.what == MSG_WEB_CONTENT){
                    String content = (String) msg.obj;
                    tv_show.setText(content);
                    return true;
                }
                return false;
            }
        });
    }

使用get查询归属地

// okhttp的异步get请求
    private void useAsynGet() {
        OkHttpClient okHttpClient = new OkHttpClient();
//        String url = "http://www.qq.com";
        String url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=13800138000&userID=";
        Request request = new Request.Builder().url(url).get().build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("useAsynGet", e.toString());
            }

            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException {
                String content = response.body().string();
                Log.e("useAsynGet",content);
                // 不能直接调用  现在还是在子线程
                // tv_show.setText(content);

                // 发消息到主线程
                Message message = new Message();
                message.what = MSG_WEB_CONTENT;
                message.obj = content;
                myHandler.sendMessage(message);
            }
        });
    }

使用Post方式查询归属地

// 使用post方式查询归属地
    private void useOkhttpPost() {
        String url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo";
         // "?mobileCode=13800138000&userID="; 通过post参数提交

        RequestBody requestBody = new FormBody.Builder()
                .add("mobileCode", "13456789999")
                .add("userID","")
                .build();

        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(url).post(requestBody).build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("useOkhttpPost", e.toString());
            }

            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException {
                String content = response.body().string();
                Log.e("useOkhttpPost", content);

                // 发消息到主线程
                Message message = new Message();
                message.what = MSG_WEB_CONTENT;
                message.obj = content;
                myHandler.sendMessage(message);
            }
        });
    }

使用okhttp获取图片


    // 使用okhttp获取并显示图片
    private void useOkhttpGetImage() {
        String url = "http://www.gdcp.edu.cn/service?token=5a5d0c3fa9a145719be5b98f7b49eb56";
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(url).get().build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("useOkhttpGetImage", e.toString());
            }

            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException {
                Log.e("useOkhttpGetImage", response.message());

                InputStream inputStream = response.body().byteStream();
                // 怎么把流转成图片
                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

                // 此时还在子线程
                // iv_show.setImageBitmap(bitmap);

                // 通过消息发送到主线程
                Message message = new Message();
                message.what = MSG_GET_IMG;
                message.obj = bitmap;
                myHandler.sendMessage(message);
            }
        });


    }
使用Hanlder处理消息 显示图片
// 初始化Handler
    private void initHandler() {
        myHandler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(@NonNull Message msg) {
                if(msg.what == MSG_WEB_CONTENT){
                    String content = (String) msg.obj;
                    tv_show.setText(content);
                    return true;
                }

                if(msg.what == MSG_GET_IMG){
                    Bitmap bitmap = (Bitmap) msg.obj;
                    iv_show.setImageBitmap(bitmap);
                    return true;
                }
                return false;
            }
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值