OKHttp的简单使用

来源:互联网 发布:枪手步态 知乎 编辑:程序博客网 时间:2024/05/20 05:10

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

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

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

// 利用OkHttp完成同步get请求public class MainActivity extends AppCompatActivity {//首先定义OKHttpprivate OkHttpClient client;private String url = "http://www.baidu.com";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//初始化client = new OkHttpClient();new Thread(new Runnable() {//由于OKHttp等同于HttpURLConnection,因此需要在线程中执行@Overridepublic 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();//同步请求,会返回响应,executeResponse 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 {//定义OkHttpprivate OkHttpClient client;private String url = "http://www.baidu.com";@Overrideprotected 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() {@Overridepublic void onFailure(Request request, IOException e) {            }@Overridepublic 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;@Overrideprotected 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() {@Overridepublic void onFailure(Request request, IOException e) {            }@Overridepublic void onResponse(final Response response) throws IOException {tv.post(new Runnable() {@Overridepublic 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() {@Overridepublic boolean handleMessage(Message msg) {if (msg.what == 1) {tv.setText((String) msg.obj);            }return false;        }    });@Overrideprotected 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() {@Overridepublic void onFailure(Request request, IOException e) {            }@Overridepublic 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() {@Overridepublic boolean handleMessage(Message msg) {if (msg.what == 1) {tv.setText((String) msg.obj);            }return false;        }    });@Overrideprotected 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() {@Overridepublic 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的简单使用做的介绍,以上代码只作为参考,
本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,大家一起努力进步!

0 0
原创粉丝点击