在使用OkHttp与Gson时,需要现在项目中导入OkHttp与Gson
在build.gradle中添加-
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.google.code.gson:gson:2.8.5'
在安卓9.0中使用OkHttp,需要在res文件夹下新建xml文件夹,并在xml文件夹下新建
network_security_config.xml文件
文件内的内容为
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
并在AndroidMainfest.xml<application></application>中添加
android:networkSecurityConfig="@xml/network_security_config"
okhttp的具体使用:
public void getGundam(){ //获取名字与url,将数据返回并解析为一个Gundam_item对象
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient=new OkHttpClient();
RequestBody requestBody = new FormBody.Builder()
.add("request_item", "gundam")
.build();
Request request = new Request.Builder()
.url("http://10.0.2.2:8888/Student/Get_item")
.post(requestBody)
.build();
Response respons;
try {
respons=okHttpClient.newCall(request).execute();
if (respons.isSuccessful()){
result=respons.body().string();
Gson gson=new Gson();
gundam_item=gson.fromJson(result,Gundam_item.class); //将数据解析成gundam_item对象
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("io error");
}
}
}).start();
}
因为使用网络请求无法在主线程中进行操作,所有要新开一个线程进行网络操作
首先实例化一个OkHttpClient对象。
在实例化一个RequestBody对象,存储post请求方式所需要的数据,requestbody通过键值名对键值的方式存储数据
实例化一个Request对象,填写url和选择请求方式,如果是do方式,不需要传值,如果是post请求,需要传入已经创建好的requestbody对象。
实例化一个response对象接收request执行后返回的数据
如果response成功执行,进入if语句
用String类型的result接收response中的数据
接下来要使用Gson
首先要根据后端传回的json创建好一个实体类,类的属性和属性名与返回的数据一致
后端模拟返回的数据为:
{"length":8,"item_name":["UC-0079","第08MS小队","口袋里的战争","UC_0083","Z_Gundam","ZZ_Gundam","逆袭的夏亚","UC_0096"],"item_url":["http://10.0.2.2:8888/Student/Gundam_Img/UC/UC_0079.jpg","http://10.0.2.2:8888/Student/Gundam_Img/UC/UC_08MS.jpg","http://10.0.2.2:8888/Student/Gundam_Img/UC/UC_0080.jpg","http://10.0.2.2:8888/Student/Gundam_Img/UC/UC_0083.jpg","http://10.0.2.2:8888/Student/Gundam_Img/UC/ZGundam.jpg","http://10.0.2.2:8888/Student/Gundam_Img/UC/ZZGundam.jpg","http://10.0.2.2:8888/Student/Gundam_Img/UC/逆袭的夏亚.jpg","http://10.0.2.2:8888/Student/Gundam_Img/UC/UC_0096.jpg"]}
主要属性为int类型的length,String类型数组item_name,String类型数组item_url
在AndroidStudio中创建的实体类为
package entity;
import index_fragment.Gundam;
public class Gundam_item {
private int length;
private String[] item_name;
private String[] item_url;
private boolean isDonwload=false;
public Gundam_item(){
}
public Gundam_item(int length){
this.length=length;
item_name=new String[length];
item_url=new String[length];
}
public void setLength(int length){
this.length=length;
}
public int getLength(){
return length;
}
public void setItem_name(String[] item_name){
this.item_name=item_name;
}
public String[] getItem_name(){
return item_name;
}
public void setItem_img_url(String[] item_img_url){
this.item_url=item_img_url;
}
public String[] getItem_img_url(){
return item_url;
}
public String get_cent_item_name(int position){
return item_name[position];
}
public String get_cent_item_url(int position){
return item_url[position];
}
}
接下来使用Gson将json转换成对应的类
实例化一个Gson对象
调用gson.fromJson方法,将获取到的json字符串与要转换的实体类传入,用一个实体类对象进行接收,这时这个实体类便被后端传会的json数据实例化了。