OkHttp与Gson基础使用

在使用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数据实例化了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值