【Android - 框架】之OkHttp的使用
来源:互联网 发布:ubuntu paichu fuzhi 编辑:程序博客网 时间:2024/05/22 05:09
OkHttp是一个非常优秀的网络访问框架,当下非常火的Retrofit的底层就是使用OkHttp进行封装的。接下来介绍以下OkHttp的简单使用。
1、导入依赖
在Android Studio中,在Module的build.gradle文件中导入以下依赖:
compile 'com.squareup.okhttp3:okhttp:3.4.2' compile 'com.squareup.okio:okio:1.11.0'
2、代码编写
import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity { private static final String URL = "https://api.github.com/users/basil2style"; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); } @Override protected void onResume() { super.onResume(); // okhttGet(); okhttpPost(); } /** * GET请求 */ private void okhttGet() { // 创建OkHttpCliend对象 OkHttpClient client = new OkHttpClient(); // 创建一个Request Request request = new Request.Builder() .url(URL) .build(); // call Call call = client.newCall(request); // 请求加入调度(异步) call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 请求失败时回调的方法 } @Override public void onResponse(Call call, Response response) throws IOException { // 请求成功时回调的方法 final String result = response.body().string(); // 在主线程中更新UI runOnUiThread(new Runnable() { @Override public void run() { setTextToTextView(result); } }); } }); } /** * POST请求 */ private void okhttpPost() { OkHttpClient client = new OkHttpClient(); // FormBody.Builder builder = new FormBody.Builder(); // builder.add("username", "ITGungnir"); Request request = new Request.Builder() .url(URL) // .post(builder.build()) .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 请求失败时回调的方法 } @Override public void onResponse(Call call, Response response) throws IOException { // 请求成功时回调的方法 final String result = response.body().string(); // 在主线程中更新UI runOnUiThread(new Runnable() { @Override public void run() { setTextToTextView(result); } }); } }); } /** * 通过返回结果获取要展示在TextView中的文本信息 */ private void setTextToTextView(String data) { try { JSONObject parent = new JSONObject(data); StringBuffer sb = new StringBuffer(); sb.append("type: " + parent.getString("type") + "\n"); sb.append("id: " + parent.getInt("id") + "\n"); sb.append("name: " + parent.getString("name") + "\n"); sb.append("location: " + parent.getString("location") + "\n"); sb.append("blog: " + parent.getString("blog") + "\n"); sb.append("email: " + parent.getString("email")); tv.setText(sb.toString()); } catch (JSONException e) { e.printStackTrace(); } }}
3、OkHttp原理
(1)当创建同步请求或异步请求时,如果此时拦截器链(请求队列)中没有请求,则直接进行网络请求;如果此时请求队列中已经有请求,则将请求添加到请求队列中。请求队列负责调度请求,将请求一个一个取出进行处理。
(2)HttpEngine负责发起请求,发起请求后先去缓存中查找有没有缓存,如果有,则直接从缓存中取出数据;如果缓存中没有,则开始准备从网络获取数据。
(3)OkHttp内部维护了一个网络连接池ConnectionPool,维护了一些网络请求,保证网络请求的循环利用。
(4)从ConnectionPool中取出一个请求对象,访问网络,获取访问结果Response并进行处理。
4、OkHttp封装
以下是鸿洋大神封装的一个OkHttp操作工具框架,其封装了:
- 一般的get请求
- 一般的post请求
- 基于Http Post的文件上传(类似表单)
- 文件下载/加载图片
- 上传下载的进度回调
- 支持取消某个请求
- 支持自定义Callback
- 支持HEAD、DELETE、PATCH、PUT
- 支持session的保持
- 支持自签名网站https的访问,提供方法设置下证书就行
0 0
- 【Android - 框架】之OkHttp的使用
- Android框架之路——OKHttp的使用
- Android 网络框架之 OkHttp 基础使用
- Android中OKHttp框架的使用
- Android中OKHttp框架的使用
- Android网络请求框架的使用okhttp
- okhttp,Android网络框架学习之OKHttp
- okhttp框架的使用
- OKHttp框架的使用
- Okhttp框架的使用
- Android 开发框架之okhttp 网络框架的学习
- android 开发 - 使用okhttp框架封装的开发框架
- Android网络技术之OkHttp框架
- Android中使用OkHttp框架
- Android网络框架-OkHttp使用
- Android网络框架-OkHttp使用
- Android开发之OkHttp的使用
- Android开发之OkHttp的使用
- Codeforces Round #381 (Div. 2) E. Alyona and towers
- Android 缓存机制(二)
- File常用的方法
- 开发:个人理财_CDUESTC
- dbms_ddl
- 【Android - 框架】之OkHttp的使用
- Dump文件介绍与使用
- |算法讨论|贪心算法 学习笔记
- xgboost特征选择
- 文字跳动特效
- ADO远程连接数据库SQL sever
- NOJ 2143 洗碗
- C++顺序容器
- 获取元素位置的快速方法