GET同步异步 - POST同步异步

  • 总结:

  • client.newCall(request).enqueue/execute()

  • 1.get同步异步

  • 2.post同步异步(键值对)

  • 3.post 提交字符串

post提交字符串

private void postString() {
    //java调用方法几种方式,2种
    //普通方法,对象.方法()
    //静态方法:类名.方法()
//同一个类中,方法名相同,参数列表不同 --- 重载
//子类重新复写父类的方法---重写

//MediaType: 媒体类型,网络交互的数据都是媒体(文字,图片,音视频....)
//text:文本
//audio:音频
//video:视频
//image:图片
//二级制流: application/octet-stream
    
MediaType type = MediaType.parse("text/x-markdown; charset=utf-8");
RequestBody body = RequestBody.create(type,"没人瞌睡");
Request request = new Request.Builder()
        .url("https://api.github.com/markdown/raw")
        .post(body)
        .build();
new OkHttpClient()
        .newCall(request)
        .enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: "+e.toString());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.d(TAG, "onResponse: "+response.body().string());
            }
        });
    }
post异步请求
private void postEnqueue() {
    //client.newCall(request).enqueue();
    //请求体中添加参数
    RequestBody body = new FormBody.Builder()
            .add("username", "xts")
            .add("password", "123456")
            .add("repassword", "123456")
            .build();
    Request request = new Request.Builder()
            .url("https://www.wanandroid.com/user/register")
            .post(body)
            .build();
new OkHttpClient()
        .newCall(request)
        .enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: " + e.toString());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.d(TAG, "onResponse: " + response.body().string());
            }
        });
    }
post同步方式
private void postExecute() {
    //client.newCall(request).execute();
    new Thread(new Runnable() {
        @Override
        public void run() {
            //username: 用户名
            //password:密码
            //repassword:确认密码
            //.addEncoded():添加参数,需要编码,参数有中文使用
            //add:参数没有中文使用
            RequestBody body = new FormBody.Builder()
                    .add("username", "xts")
                    .add("password", "123456")
                    .add("repassword", "123456")
                    .build();
            Request request = new Request.Builder()
                    .post(body)//指定post请求方式,参数RequestBody请求体
                    .url("https://www.wanandroid.com/user/register")
                    .build();
            try {
                Response response = new OkHttpClient()
                        .newCall(request)
                        .execute();
           Log.d(TAG, "run: " + response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();

}

get异步
private void enqueue() {
    //client.newCall().enqueue(异步)/excute(同步);
    final Request request = new Request.Builder()
            .url("https://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/3")
            .build();
    new OkHttpClient.Builder()
            .build()//返回的就是okhttpclient对象
            .newCall(request)
            //异步请求方式,不会阻塞当前线程
            .enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    Log.d(TAG, "onFailure: " + e.toString());
                }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.d(TAG, "onResponse: " + response.body().string());
            }
        });

Log.d(TAG, "enqueue: 滴答");
get同步
//如果没有添加网络权限,会崩,报一下异常
//SecurityException: Permission denied (missing INTERNET permission?)
private void execute() {
    //1.创建OKhttpClient对象
    //2.创建request对象
    //3.OKhttpClient对象.newCall(request)
    //4.调用enqueue(回调对象)
//链式调用
//client.newCall().enqueue(异步)/excute(同步);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
        .get()//指定请求方式,默认是get
        .url("https://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/3")//指定网址
        .build();
final Call call = client.newCall(request);

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            //同步方法,会阻塞当前线程,
            Response response = call.execute();
            Log.d(TAG, "run: " + response.body().string());
            Log.d(TAG, "run: 滴滴");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值