OKHttp的简单使用

OKHttp是现在比较流行的网络请求框架之一,所以今天我们就来简单介绍一下,
但是想要使用OKHttp,需要添加依赖,
这里写图片描述

因为是网络请求,所有一定不要忘记在清单文件中添加网络权限,避免不必要的麻烦,
这里写图片描述

一、利用OKHttp来完成同步的get请求,


// 利用OkHttp完成同步get请求
public class MainActivity extends AppCompatActivity {

//首先定义OKHttp
private OkHttpClient client;
private String url = "http://www.baidu.com";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
new Thread(new Runnable() {//由于OKHttp等同于HttpURLConnection,因此需要在线程中执行
@Override
public void run() {
try {
                    syncGet();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

//利用OKHttp来完成同步的get请求
private void syncGet() throws IOException {
//创建一个网络请求
Request request = new Request.Builder().url(url).build();
//同步请求,会返回响应,execute
Response response = client.newCall(request).execute();
//如果请求成功后
if (response.isSuccessful()) {
            Looper.prepare();//Looper在线程中,将消息加入到消息队列,打出吐司来测试
Toast.makeText(this, response.body().string(), Toast.LENGTH_SHORT).show();
            Looper.loop();
        }
    }
}

二、利用OKHttp来完成异步的get请求,


//通过OKHttp来进行异步的get请求
public class MainActivity extends AppCompatActivity {

//定义OkHttp
private OkHttpClient client;
private String url = "http://www.baidu.com";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
        asynGet();
    }

private void asynGet() {
//创建一个网络请求
Request request = new Request.Builder().url(url).build();
//异步请求.CallBack里面封装了线程
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

            }

@Override
public void onResponse(Response response) throws IOException {
                Log.d("MainActivity", response.body().string());
            }
        });
    }

}

三、通过OKHttp来完成get的请求头,


//通过OKHttp来完成get请求头
public class MainActivity extends AppCompatActivity {

//定义
private OkHttpClient client;
private TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
tv = (TextView) this.findViewById(R.id.tv);
        withHeadGet();
    }

private void withHeadGet() {//APIKey是在api store中找的,在那里可以找到你需要的,下面的这个星号是代表电话号码,
        String apiKey = "7ed1315843f4f062bbbcf33d57e3899b";
        String headerUrl = "http://apis.baidu.com/apistore/mobilenumber/mobilenumber?phone=151*******";
//创建一个请求
final Request request = new Request.Builder().url(headerUrl).addHeader("apiKey", apiKey).build();

client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

            }

@Override
public void onResponse(final Response response) throws IOException {
tv.post(new Runnable() {
@Override
public void run() {
try {
tv.setText(response.body().string());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        });
    }

}

可以看页面上显示的效果,

这里写图片描述

四、通过OKHttp来完成post的异步请求,


//通过OKHttp来完成post的异步请求
public class MainActivity extends AppCompatActivity {

//定义
private TextView tv;
private OkHttpClient client;
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 1) {
tv.setText((String) msg.obj);
            }
return false;
        }
    });

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
tv = (TextView) findViewById(R.id.tv);
        postRequest();
    }

private void postRequest() {

        String postURl = “你要请求的网址";
//post请求需要请求体,根据你请求的网址,来填写请求体
FormEncodingBuilder builder = new FormEncodingBuilder();
        builder.add("token", "");
        builder.add("device_type", "2");
//创建请求体
RequestBody body = builder.build();
//创建请求
Request request = new Request.Builder().url(postURl).post(body).build();
//发出异步的post请求
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

            }

@Override
public void onResponse(Response response) throws IOException {
//通过handler来发送消息
Message message = new Message();
                message.what = 1;
                message.obj = response.body().string();
handler.sendMessage(message);
            }
        });

    }
}

五、通过OKHttp来完成post的同步请求,


//通过OKHttp来完成post的同步请求
public class MainActivity extends AppCompatActivity {

//定义
private TextView tv;
private OkHttpClient client;
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 1) {
tv.setText((String) msg.obj);
            }
return false;
        }
    });

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
tv = (TextView) findViewById(R.id.tv);
new Thread(new Runnable() {
@Override
public void run() {
                postRequest();
            }
        }).start();

    }

private void postRequest() {

        String postURl = “你想要请求的网址";
//post请求需要请求体,根据你请求的网址,来填写请求体
FormEncodingBuilder builder = new FormEncodingBuilder();
        builder.add("token", "");
        builder.add("device_type", "2");
//创建请求体
RequestBody body = builder.build();
//创建请求
Request request = new Request.Builder().url(postURl).post(body).build();
//响应
Response response = null;
try {
            response = client.newCall(request).execute();
//发出同步的post请求
if (response.isSuccessful()) {
//通过handler来发送消息
Message message = new Message();
                message.what = 1;
                message.obj = response.body().string();
handler.sendMessage(message);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上是对OKHttp的简单使用做的介绍,以上代码只作为参考,
本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,大家一起努力进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值