[1]OkHttp介绍之Get、Post方法

来源:互联网 发布:相册制作视频的软件 编辑:程序博客网 时间:2024/05/17 23:12

一、作用

一般的get请求
一般的post请求
基于Http的文件上传
文件下载
加载图片
支持请求回调,直接返回对象、对象集合
支持session的保持

二、导包
导入okhttp3.6.0和okio包
三、get和post请求
1、get请求
1) OkHttpClient:新建一个OkHttpClient实例,用于处理请求。

2) Request:构建请求参数,如url,请求方式,请求参数,header等。

3) Call:生成一个具体请求实例,相当于将请求封装成了任务;两种方式:

       ①、call.execute(),非异步方式,会阻塞线程,等待返回结果。       ②、call.enqueue(Callback),异步方式。里面有onFailure()和onResponse()方法只能运行在非主线程,不能进行UI操作。可以用handler去操作UI界面。

4) Response:结果响应。
response.body().string()–>返回字符串(小文档);
.bytes()–>返回二进制字节数组
.byteStream()–>返回InputStream(超过1M的用这个)
2、Post请求
同上面差不多,但需要增加RequestBody(存放json数据)RequestBody.create(Json,json);或FormBody.Builder(存放表单)FormBody.Builder().add(“key”,”name”);来存储请求的参数信息,在Request.Builder增加post(RequestBody)的调用。

package com.example.myapplication;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.io.IOException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.Headers;import okhttp3.MediaType;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/** * author:黄夏莲 * time:2017.04.10 */public class MainActivity extends AppCompatActivity {    Executors me;    ExecutorService executorService;    String url = "https://www.baidu.com/";    String []json=new String[]{"abc"};    private Headers headers;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        /*  executorService = me.newFixedThreadPool(5);        for(int i=0;i<20;i++){             Runnable r = new Runnable() {               @Override               public void run() {                Log.i("TAG",Thread.currentThread().getName());               }            };            executorService.execute(r);        }*/        /*1)        OkHttpClient:新建一个OkHttpClient实例,用于处理请求。        2)        Request:构建请求参数,如url,请求方式,请求参数,header等。        3)        Call:生成一个具体请求实例,相当于将请求封装成了任务;两种方式:           ①、call.execute(),非异步方式,会阻塞线程,等待返回结果。           ②、call.enqueue(Callback),异步方式。        4)      Response:结果响应。*/        new Thread(new Runnable() {            @Override            public void run() {//                onGetNet();                try {                    //提交json數據//                    String a = post(url,json[0]);                    String a = postString(url);                    Log.i("TAG",a);                    for(int i=0;i<headers.size();i++){                        Log.i("TAG",headers.name(i)+":"+headers.value(i)+";");                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }    //get异步    public void onGetNet() {        final String url = "https://www.baidu.com/";        OkHttpClient okHttpClient = new OkHttpClient();        Request request = new Request.Builder().url(url).build();        Call call = okHttpClient.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Log.i("TAG", "网络请求失败");            }            @Override            public void onResponse(Call call, Response response) throws IOException {                Log.i("TAG", "网络请求成功" + "response.body().string():" + response.body().string());            }        });    }    //get非异步    private String run(String url) throws IOException {        OkHttpClient client = new OkHttpClient();        Request request = new Request.Builder()                .url(url)                .build();        Response response = client.newCall(request).execute();        return response.body().string();    }    //post    //①提交json数据    public static final MediaType JSON            = MediaType.parse("application/json; charset=utf-8");    OkHttpClient client = new OkHttpClient();    String post(String url, String json) throws IOException {        RequestBody body = RequestBody.create(JSON, json);        Request request = new Request.Builder()                .url(url)                .post(body)                .build();        Response response = client.newCall(request).execute();        return response.body().string();    }    //②提交字符串   String postString(String url)throws IOException {       FormBody formBody = new FormBody.Builder().add("name", "aaa").add("age", "13").build();       Request request = new Request.Builder()               .url(url)               .post(formBody)               .build();       Response response = client.newCall(request).execute();         headers = response.headers();       return response.body().string();   }}
0 0
原创粉丝点击