1.okhttp是一個高效的、快速的被谷歌承認的,支持HTTP/2和SPDY
volley是一個方便網絡任務庫,能夠負責請求、加載、緩存等同步問題,也能夠處理圖片、JSON、文本操做起來比較簡單
gson是JSON序列化和反序列化(以上三個能相互間輕鬆使用主要仍是由於okhttp是谷歌推薦的、volley是谷歌開發的、Gson是谷歌開發的

)
2.okhttp的Get用法:
首先下載jar包,jar包的下載地址我不在發連接!
[代碼]java代碼:
01
02
03
04
05
06
07
08
09
10
11
12
|
OkHttpClient client =
new
OkHttpClient();
public
void
execute()
throws
Exception {
Request request =
new
Request.Builder()
.url(
"http://www.apkbus.com/forum.php"
)
.build();
Response response = client.newCall(request).execute();
if
(response.isSuccessful()){
System.out.println(response.body().string());
}
}
|
Android自己不容許UI作網絡線程,要開啓一個子線程;Okhttp支持異步線程並回調返回,上面的方法稍加改動便可:
[代碼]java代碼:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
private
void
enqueue(){
Request request =
new
Request.Builder()
.url(
"http://www.apkbus.com/forum.php"
)
.build();
client.newCall(request).enqueue(
new
Callback() {
@Override
public
void
onFailure(Request request, IOException e) {
}
@Override
public
void
onResponse(Response response)
throws
IOException {
if
(response.isSuccessful()){
System.out.println(response.body().string());
}
}
});
}
|
Okhttp的post的用法:
RequestBody formBody = new FormEncodingBuilder()
.add("platform", "android")
.add("name", "chace")
.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);
}
這個代碼是同步網絡請求,異步就改爲enqueue就好了。
這個okhttp和gson的用法是整合於網絡,不過寫的清晰易懂

:
json串:
{
"data": [
{
"appcontent": "1",
"appname": "UC瀏覽器",
"apppackagename": "com.UCMobile",
"id": 1,
"remark": "1"
},
{
"appname": "支付寶",
"apppackagename": "com.alipay.android.app",
"id": 2
},
{
"appname": "WPS",
"apppackagename": "cn.wps.moffice_eng",
"id": 3
}
],
"msg": "獲取信息列表成功",
"version": 2
}
創建javaBean:
這是數組裏面的屬性:
public class ApkInfo {
private String apppackagename;
private Integer id;
private String appname;
private String appcontent;
private String remark;
public String getApppackagename() {
return apppackagename;
}
public void setApppackagename(String apppackagename) {
this.apppackagename = apppackagename;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAppname() {
return appname;
}
public void setAppname(String appname) {
this.appname = appname;
}
public String getAppcontent() {
return appcontent;
}
public void setAppcontent(String appcontent) {
this.appcontent = appcontent;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "ApkInfo [id=" + id + ", remarm="
+ remark + ", appname=" + appname + ", appcontent=" + appcontent
+ ", apppackagename=" + apppackagename + "]";
}
}
這是外部集合的屬性:
public class PackageListInfo {
private String msg;
private String version;
private List<Object> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public List<Object> getData() {
return data;
}
public void setData(List<Object> data) {
this.data = data;
}
@Override
public String toString() {
return "PackageListInfo [version=" + version + ", data=" + data + ", msg=" + msg
+ "]";
}
}
新建一個OKHTTP的管理類get獲得JSON數據,並進行處理。
import android.util.Log;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class GetApkPackage {
public static String apkPackageUrl = http://192.168.10.133:8080/getAppInfor;
public static GetApkPackage install = new GetApkPackage();
public static ArrayList<String> appList=new ArrayList<String>();
public void getPackage() {
OkHttpClient mOkHttpClient = new OkHttpClient();
final Request request = new Request.Builder().url(apkPackageUrl).build();
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.out.println("獲取apk列表失敗");
Log.d("GetApkPackage", e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
System.out.println(result);
//InputStream is = response.body().byteStream();
//byte[] bytes = response.body().bytes();
Gson gson = new Gson();
PackageListInfo packlist = gson.fromJson(result,PackageListInfo.class);
System.out.println(packlist.getData().toString());
List<ApkInfo> apkList = new ArrayList<ApkInfo>();
Type type = new TypeToken<ArrayList<ApkInfo>>() {}.getType();
apkList = gson.fromJson(packlist.getData().toString(), type);
/*
Map<String,ApkInfo> apkList = gson.fromJson(packlist.getData().toString(),
new TypeToken<List<ApkInfo>>() {
}.getType());
*/
if(apkList == null){
System.out.println("apkpackage列表爲空");
return;
}
for(int i =0;i<apkList.size();i++){
String apkName = apkList.get(i).getApppackagename();
System.out.println(apkName);
appList.add(apkName);
}
}
});
}
public static GetApkPackage getInstall(){
return install;
}
}
上述代碼中,對JSON數據的處理看起來很簡單,只要new一個GSON實例,而後經過gson.fromJson方法,就可以獲得json數據
[java] view plain copy 在CODE上查看代碼片派生到個人代碼片
Gson gson = new Gson();
PackageListInfo packlist = gson.fromJson(result,PackageListInfo.class);
OKHTTP發送一個字符串給服務器的實例以下:
[java] view plain copy 在CODE上查看代碼片派生到個人代碼片
public final class PostString {
public static final MediaType MEDIA_TYPE_MARKDOWN
= MediaType.parse("text/x-markdown; charset=utf-8");
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
String postBody = ""
+ "Releases\n"
+ "--------\n"
+ "\n"
+ " * _1.0_ May 6, 2016\n"
+ " * _1.1_ June 15, 2016\n"
+ " * _1.2_ August 11, 2016\n";
Request request = new Request.Builder()
.url("https://192.168.10.133:8080/base")
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody))
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
public static void main(String... args) throws Exception {
new PostString().run();
}
}
3.Volley的用法:
Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。
JsonObjectRequest:返回JSON對象。
JsonArrayRequest:返回JsonArray。
StringRequest:返回String,這樣能夠本身處理數據,更加靈活。
咱們建立一個StringRequest:
StringRequest stringRequest = new StringRequest("http://www.apkbus.com/forum.php",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
這篇主要仍是簡單了介紹了三者的關係和用法

!