Okhttp xml和json数据解析

OkHttp发送请求
需要添加依赖
public class HttpUtil {
    public static void sendRequestWithHttp(String address,okhttp3.Callback callback){
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(address)
                .build();
        client.newCall(request).enqueue(callback);
    }
    
}
public static void sendRequestWithHttpClient(String address,okhttp3.Callback callback){
        OkHttpClient  client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(address)
                .build();
        client.newCall(request).enqueue(callback);
    }
pull方式解析xml数据
private void parseXMLWithPull(String xmlData) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(new StringReader(xmlData));
            int eventType = parser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            while (eventType!=XmlPullParser.END_DOCUMENT){
                String nodeName = parser.getName();
                switch (eventType){
                    //开始解析马哥节点
                    case XmlPullParser.START_TAG:{
                        if("id".equals(nodeName)){
                            id = parser.nextText();
                        }else if("name".equals(nodeName)){
                            name = parser.nextText();
                        }else if("version".equals(nodeName)){
                            version = parser.nextText();
                        }
                        break;
                    }
                    //完成某个节点
                    case XmlPullParser.END_TAG:{
                        if("app".equals(nodeName)){
                            Log.d("main",id);
                            Log.d("main",name);
                            Log.d("main",version);
                        }
                        break;


                    }


                }
                eventType = parser.next();
            }


        }catch (Exception e){
            e.printStackTrace();
        }




    }


SAX解析xml数据
新建一个类继承DefaultHandler;
public class Myhandler extends DefaultHandler {


    private String nodeName;
    private StringBuilder name;
    private StringBuilder id;
    private StringBuilder version;
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        id = new StringBuilder();
        name = new StringBuilder();
        version = new StringBuilder();
    }
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        nodeName = localName;//记录当前节点名字
    }


    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        //根据当前节点名字判断将内容添加到那个StringBuild中
        if("id".equals(nodeName)){
            id.append(ch,start,length);
        }else if("name".equals(nodeName)){
            name.append(ch,start,length);
        }else if("version".equals(nodeName)){
            version.append(ch,start,length);
        }
    }
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if("app".equals(localName)){
            Log.d("main",id.toString().trim());
            Log.d("main",name.toString().trim());
            Log.d("main",version.toString().trim());
            //最后将StringBuilder清空
            id.setLength(0);
            name.setLength(0);
            version.setLength(0);
        }
    }
    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
    }




执行解析
private void parseXMLWithSax(String xmlData) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            XMLReader xmlReader = factory.newSAXParser().getXMLReader();
            Myhandler handler = new Myhandler();
            xmlReader.setContentHandler(handler);
            //开始执行解析
            xmlReader.parse(new InputSource(new StringReader(xmlData)));
        }catch (Exception e){
            e.printStackTrace();
        }


    }


解析JSON数据
使用JSONObject解析
private void parseJSONWithJSONObject(String jsonData) {
        try {
            JSONArray array = new JSONArray(jsonData);
            for(int i = 0;i<array.length();i++){
                JSONObject object = array.getJSONObject(i);
                String id = object.getString("id");
                String name = object.getString("name");
                String version = object.getString("version");
                Log.d("main",id);
                Log.d("main",name);
                Log.d("main",version);


            }


        }catch (Exception e){
            e.printStackTrace();
        }


    }
使用GSON解析
定义一个类


public class App {
    private String id;
    private String name;
    private String version;


    public String getId() {
        return id;
    }


    public void setId(String id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public String getVersion() {
        return version;
    }


    public void setVersion(String version) {
        this.version = version;
    }
}






private void parseJSONWithGSON(String jsonData) {
        Gson gson = new Gson();
//解析的是JSON数组 借助TypeToken将期望解析的数据类型传入到fromJson()中;
        List<App> appList = gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());
        for(App app :appList){
            Log.d("main",app.getId());
            Log.d("main",app.getName());
            Log.d("main",app.getVersion());
        }
        
    }


}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值