android okhttp3使用,5--安卓网络编程之OKHttp3的使用

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

一、GET请求注:回调的Callback在子线程执行,不能更新UIprivate void doGet() {    //1.获取OkHttpClient对象

OkHttpClient okHttpClient = new OkHttpClient();    //2.获取Request对象

Request request = new Request.Builder().get().url("http://www.baidu.com").build();    //3.将Request封装为Call对象

Call call = okHttpClient.newCall(request);    //4.执行Call

call.enqueue(new Callback() {        @Override

public void onFailure(Call call, IOException e) {

Log.e(TAG, "onFailure: " + e);

}        @Override

public void onResponse(Call call, Response response) throws IOException {

Log.e(TAG, "onResponse: " + response.body().string());

}

});

}

将访问百度的服务器,服务器返回的内容体便是百度首页的html

AAffA0nNPuCLAAAAAElFTkSuQmCC

百度首页html.png

二、POST请求private void doPost() {    //1.获取OkHttpClient对象

OkHttpClient okHttpClient = new OkHttpClient();    //2.构造RequestBody

FormBody body = new FormBody.Builder().add("id", "26").build();

Request request = new Request.Builder().url(Cons.BASE_URL+"swords/postFind").post(body).build();    //3.将Request封装为Call对象

Call call = okHttpClient.newCall(request);    //4.执行Call

call.enqueue(new Callback() {        @Override

public void onFailure(Call call, IOException e) {

Log.e(TAG, "onFailure: " + e);

}        @Override

public void onResponse(Call call, Response response) throws IOException {

String result = response.body().string();

Log.e(TAG, "onResponse: " + result);

runOnUiThread(() -> ToastUtil.showAtOnce(MainActivity.this, result));

}

});

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

post请求.png

三、POST请求的请求体中添加文本private void doPostStr() {        //1.获取OkHttpClient对象

OkHttpClient okHttpClient = new OkHttpClient();        //2.构造RequestBody

RequestBody body = RequestBody.create(MediaType.parse("text/plain;chaset=utf-8"),                "轻轻的我走了,\n" +                "正如我轻轻的来;\n" +                "我轻轻的招手,\n" +                "作别西天的云彩。\n" +                "\n" +                "那河畔的金柳,\n" +                "是夕阳中的新娘;\n" +                "波光里的艳影,\n" +                "在我的心头荡漾。\n);

Request request = new Request.Builder().url(Cons.BASE_URL+"PostString").post(body).build();

//3.将Request封装为Call对象

Call call = okHttpClient.newCall(request);

//4.执行Call

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

Log.e(TAG, "onFailure: " + e);

}

@Override

public void onResponse(Call call, Response response) throws IOException {

String result = response.body().string();

Log.e(TAG, "onResponse: " + result);

runOnUiThread(() -> ToastUtil.showAtOnce(MainActivity.this, result));

}

});

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

post请求body中加入文本.png

四、通过流传输文件private void doPostFile() {

File file = new File(Environment.getExternalStorageDirectory(), "DCIM/Camera/iv_500x400.png");    //1.获取OkHttpClient对象

OkHttpClient okHttpClient = new OkHttpClient();    //2.构造Request--任意二进制流:application/octet-stream

Request request = new Request.Builder()

.url(Cons.BASE_URL + "PostFile")

.post(RequestBody.create(MediaType.parse("application/octet-stream"), file)).build();    //3.将Request封装为Call对象

Call call = okHttpClient.newCall(request);    //4.执行Call

call.enqueue(new Callback() {        @Override

public void onFailure(Call call, IOException e) {

Log.e(TAG, "onFailure: " + e);

}        @Override

public void onResponse(Call call, Response response) throws IOException {

String result = response.body().string();

Log.e(TAG, "onResponse: " + result);

runOnUiThread(() -> ToastUtil.showAtOnce(MainActivity.this, result));

}

});

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

上传文件.png

五、通过模拟表单上传文件:MultipartBody/**

* 模拟表单上传文件:通过MultipartBody

*/private void doUpload() {

File file = new File(Environment.getExternalStorageDirectory(), "DCIM/Camera/iv_500x400.png");

RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);    //1.获取OkHttpClient对象

OkHttpClient okHttpClient = new OkHttpClient();    //2.获取Request对象

RequestBody requestBody = new MultipartBody.Builder()

.setType(MultipartBody.FORM)

.addFormDataPart("file", "test.jpg", fileBody)

.build();

Request request = new Request.Builder()

.url(Cons.BASE_URL + "upload")

.post(requestBody).build();    //3.将Request封装为Call对象

Call call = okHttpClient.newCall(request);    //4.执行Call

call.enqueue(new Callback() {        @Override

public void onFailure(Call call, IOException e) {

Log.e(TAG, "onFailure: " + e);

}        @Override

public void onResponse(Call call, Response response) throws IOException {

String result = response.body().string();

Log.e(TAG, "onResponse: " + result);

runOnUiThread(() -> ToastUtil.showAtOnce(MainActivity.this, result));

}

});

}

六、下载文件:private void doDownload() {    //1.获取OkHttpClient对象

OkHttpClient okHttpClient = new OkHttpClient();    //2.获取Request对象

Request request = new Request.Builder().get().url(Cons.BASE_URL + "imgs/test.jpg").build();    //3.将Request封装为Call对象

Call call = okHttpClient.newCall(request);    //4.执行Call

call.enqueue(new Callback() {        @Override

public void onFailure(Call call, IOException e) {

Log.e(TAG, "onFailure: " + e);

}        @Override

public void onResponse(Call call, Response response) throws IOException {

File file = new File(Environment.getExternalStorageDirectory(), "download.jpg");

InputStream is = response.body().byteStream();

FileOutputStream fos = new FileOutputStream(file);            byte[] buf = new byte[102];            int len = 0;            while ((len = is.read(buf)) != -1) {

fos.write(buf, 0, len);

}

fos.close();

is.close();

}

});

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

下载本地.png

七、在安卓端显示图片:有了流,一切都好办:response.body().byteStream()

关于Bitmap的预处理等操,这里就不多说了,有兴趣的可见1-MI-Android多媒体之Bitmap:private void showImg() {    //1.获取OkHttpClient对象

OkHttpClient okHttpClient = new OkHttpClient();    //2.获取Request对象

Request request = new Request.Builder().get().url(Cons.BASE_URL + "imgs/test.jpg").build();    //3.将Request封装为Call对象

Call call = okHttpClient.newCall(request);    //4.执行Call

call.enqueue(new Callback() {        @Override

public void onFailure(Call call, IOException e) {

Log.e(TAG, "onFailure: " + e);

}        @Override

public void onResponse(Call call, Response response) throws IOException {

InputStream is = response.body().byteStream();

Bitmap bitmap = BitmapFactory.decodeStream(is);

runOnUiThread(()->{

mIdIvShow.setImageBitmap(bitmap);

});

}

});

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

安卓显示.png

作者:张风捷特烈

链接:https://www.jianshu.com/p/7c286f65f7d1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值