Android 一文弄懂如何加载xml格式数据

引言

       在大多数情况下,我们请求返回的数据基本是json或者是字符串格式,但是也有响应数据是xml格式的,比如配置信息等,那么这种情况下我们又该如何处理,把返回数据自动转化为我们定义的实体类呢?

gradle依赖

implementation ('com.squareup.retrofit2:converter-simplexml:2.1.0'){
        exclude group: 'xpp3', module: 'xpp3'
        exclude group: 'stax', module: 'stax-api'
        exclude group: 'stax', module: 'stax'
    }

加入转化器

retrofit = new Retrofit.Builder()
        .client(okHttpClient)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(new LiveDataCallAdapterFactory())
        .baseUrl(requestUrl)
        .build();

定义响应实体类

比如我们xml格式数据如下

Android 一文弄懂如何加载xml格式数据_第1张图片

所以我们实体类如下定义

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root(name = "config", strict = false)
public class AppConfigBean {
    @Element(name = "versionName")
    private String versionName;
    @Element(name = "versionCode")
    private String versionCode;
    @Element(name = "apkUrl")
    private String apkUrl;
    @Element(name = "forceUpdate")
    private String forceUpdate;
    @Element(name = "updateContent")
    private String updateContent;
    @Element(name = "openUpdate")
    private String openUpdate;

    public String getVersionName() {
        return versionName;
    }

    public void setVersionName(String versionName) {
        this.versionName = versionName;
    }

    public String getVersionCode() {
        return versionCode;
    }

    public void setVersionCode(String versionCode) {
        this.versionCode = versionCode;
    }

    public String getApkUrl() {
        return apkUrl;
    }

    public void setApkUrl(String apkUrl) {
        this.apkUrl = apkUrl;
    }

    public String getForceUpdate() {
        return forceUpdate;
    }

    public void setForceUpdate(String forceUpdate) {
        this.forceUpdate = forceUpdate;
    }

    public String getUpdateContent() {
        return updateContent;
    }

    public void setUpdateContent(String updateContent) {
        this.updateContent = updateContent;
    }

    public String getOpenUpdate() {
        return openUpdate;
    }

    public void setOpenUpdate(String openUpdate) {
        this.openUpdate = openUpdate;
    }
}

定义请求api

import android.arch.lifecycle.LiveData;

import com.iflytek.module_base.bean.AppConfigBean;
import com.iflytek.module_base.constant.UrlConstants;

import retrofit2.http.GET;

public interface AppConfigService {
    /**
     * 获取配置信息
     * @return
     */
    @GET(UrlConstants.CONFIG_XML)
    LiveData getXmlBody();
}

以上就能正确加载xml数据,另外请注意:如果项目中同时支持json、xml格式数据,切记不可同时加入两种转换器,需要分开写,也可以是以下方式

Converter.Factory factory = null;
if (tClass == AppConfigService.class){
    factory= SimpleXmlConverterFactory.create();
}else if (tClass == BusinessService.class){
    factory = GsonConverterFactory.create();
}
retrofit = new Retrofit.Builder()
        .client(okHttpClient)
        .addConverterFactory(factory)
        .addCallAdapterFactory(new LiveDataCallAdapterFactory())
        .baseUrl(requestUrl)
        .build();

 

如有不正之处,欢迎指正,谢谢!

你可能感兴趣的:(Android,android,xml数据源)