okhttp框架的最简单的基本使用 post和get请求以及用gson解析请求的数据
来源:互联网 发布:天擎网络 编辑:程序博客网 时间:2024/06/07 20:26
前言
OkHttp是一个高效的HTTP库
Ø 支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求;
Ø 如果SPDY不可用,则通过连接池来减少请求延时;
Ø 无缝的支持GZIP来减少数据流量;
Ø 缓存响应数据来减少重复的网络请求。
l 引入依赖
compile 'com.squareup.okhttp3:okhttp:3.2.0'compile 'com.squareup.okio:okio:1.7.0'compile 'com.google.code.gson:gson:2.2.4'
以代码为例
创建布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/bt_get" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Get请求" /> <Button android:id="@+id/bt_post" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Post请求" /> > </LinearLayout> <TextView android:hint="请求结果" android:id="@+id/tv_show" android:layout_width="match_parent" android:layout_height="wrap_content" /> ></LinearLayout>显示效果如下:
实例化参数
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button bt_get; private Button bt_post; TextView mtv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mtv = (TextView) findViewById(R.id.tv_show); bt_get = (Button) findViewById(R.id.bt_get); bt_post = (Button) findViewById(R.id.bt_post); bt_get.setOnClickListener(this); bt_post.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.bt_get: get(); break; case R.id.bt_post: post(); break; } }
1. Http-GET
1) OkHttpClient:新建一个OkHttpClient实例,用于处理请求。
2) Request:构建请求参数,如url,请求方式,请求参数,header等。
3) Call:生成一个具体请求实例,相当于将请求封装成了任务;两种方式:
①、call.execute(),非异步方式,会阻塞线程,等待返回结果。
②、call.enqueue(Callback),异步方式。
4) Response:结果响应。
void get(){ final String url = "http://api.map.baidu.com/telematics/v3/weather?location=嘉兴&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ";//{"{"status":201,"message":"A"status":201,"message"PP被用户自己禁用,请在控制台解禁"}为请求的数据结果 OkHttpClient okHttpClient = new OkHttpClient(); final okhttp3.Request request = new okhttp3.Request.Builder() .url(url) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { public void onFailure(Call call, IOException e) { Log.e("dsa", "onFailure() e=" + e); } public void onResponse(Call call, final Response response) throws IOException { // Log.i("sdfgsfd", " onResponse() reuslt=" + response.body().string()); Gson gson = new Gson(); final Util util = gson.fromJson(response.body().string(), Util.class); /res Log.i("sadsa", util.getMessage() + "");
runOnUiThread(new Runnable() { @Override public void run() {mtv.setText("message= "+util.getMessage()+"status= "+util.getStatus()+"");// mtv.setText(util.getStatus()+"");
}
});
}
});
}
说明:
① onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()。
② Callback的onFailure()及onResponse()运行在非主线程,不能在该方法中直接进行UI操作。
2. Http-POST
POST请求跟Get基本相同,需要增加RequestBody来存储请求的参数信息;在Request.Builder中增加post(RequestBody)调用。void post(){ OkHttpClient okHttpClient = new OkHttpClient(); RequestBody requestBody = new FormBody.Builder() .add("key", "value") .build(); final okhttp3.Request request = new okhttp3.Request.Builder() .url("http://api.map.baidu.com/telematics/v3/weather?location=嘉兴&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ") .post(requestBody) .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("ghfh", "testHttpPost ... onFailure() e=" + e); } @Override public void onResponse(Call call, Response response) throws IOException { Log.i("fsdhsfd", response.body().string()); } });}以上输出截图如下:
最后Util.class
public class Util { public String message; int status; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; }
- okhttp框架的最简单的基本使用 post和get请求以及用gson解析请求的数据
- Okhttp的post和get请求数据
- okhttp网络框架的使用get和post请求
- OKhttp的get请求和post请求
- Android中Okhttp进行get和post提交及数据请求的基本使用
- 简述OkHttp的使用:get、post请求
- Okhttp和Retrofit的get,post请求
- 简单的POST请求和get请求
- OkHttp的基本使用(一)Get请求
- OkHttp的get post 以及同步请求Demo
- okhttp网络请求框架的简单使用
- OkHttp的POST、GET请求方式
- OkHttp的get/post同步异步请求
- OkHttp get post请求的封装
- HTTP的post和get请求解析
- httpclient请求数据和gson的解析
- 封装OKHttp的get和post请求模版
- HttpClient的get和post请求数据
- iOS中常用的一些小方法
- [代码笔记] python 之网络编程: 使用udp 发送音频文件
- 日常-AndroidStudio关联Github
- android 关于倒计时CountDownTimer的用法和实例
- leetcode 448. Find All Numbers Disappeared in an Array
- okhttp框架的最简单的基本使用 post和get请求以及用gson解析请求的数据
- MFC控件关联变量
- 字符串中用正则表达式邮箱
- opencv编译
- log4j按日期输出日志的同时限制保存的个数
- 序列变换 二分搜索
- 伟的网络密码
- 《PHP设计模式》之 工厂模式
- C# 在线程中访问控件