最近一直在用OKHttp,现在就上实例简单介绍一下。
概述:
OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势。
OKHttp网站:https://github.com/square/okhttp
Jar引入:
可以通过下载jar包导入或者通过构建的方式导入
compile 'com.squareup.okhttp3:okhttp:3.4.1'
这样studio就会自动去下载或者构建。
用法
向网络发起请求的时候,最常用的就是GET和POST,下面以POST为例
POST一般需要传入参数,甚至一些header,传入参数或者header
比如传入header
Request request = new Request.Builder()
.url("https://api.github.com/repos/square/okhttp/issues")
.header("User-Agent", "OkHttp Headers.java")
.addHeader("Accept", "application/json; q=0.5")
.addHeader("Accept", "application/vnd.github.v3+json")
.build();
传入POST参数
RequestBody formBody = new FormEncodingBuilder()
.add("platform", "android")
.add("name", "bug")
.add("subject", "参数")
.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
下面POST实例:
在MainActivity中
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
String path="http://japi.juhe.cn/tv/getCategory";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();
FormBody body = new FormBody.Builder()
.add("key", "32d6fd626e96bc714744a2fc43aae475")
.build();
Request request = new Request.Builder()
.url(path)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
try {
Response response = call.execute();
if (response.code()==200)
{
Log.e(TAG, "onCreate: "+"成功了");
byte[] bytes = response.body().bytes();
String s = new String(bytes);
Log.e(TAG, "onCreate: "+s );
//解析数据
JSONObject jo=new JSONObject(s);
JSONArray result = jo.getJSONArray("result");
ArrayList<String> lists=new ArrayList<String>();
for (int i=0;i<result.length();i++){
JSONObject jo1= (JSONObject) result.get(i);
String name = jo1.getString("name");
lists.add(name);
}
Log.e(TAG, "onCreate: "+ lists.size() );
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
}).start();
}
}
在XML文件中:
<ImageView
android:id="@+id/iv"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
在清单文件中:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>