安卓之解析XML格式数据 Pull方式

package com.example.thinkpad.http;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
    TextView responseText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button sendRequest=(Button) findViewById(R.id.send_request);
        responseText=(TextView) findViewById(R.id.response_text);
        sendRequest.setOnClickListener(this);
    }
    @Override
    public void onClick(View v){
        if(v.getId()==R.id.send_request){    
            sendRequestWithOkHttp();//使用OkHttp框架向网页请求数据
        }
    }
    private void sendRequestWithOkHttp(){//请求数据,和发起解析XML函数
        //开启线程来发起网络请求
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                  OkHttpClient client=new OkHttpClient();
                    Request request=new Request.Builder()
                    .url("http://10.0.2.2/get_data.xml")
                            .build();
                    Response response=client.newCall(request).execute();
                    String responseData=response.body().string();
                    parseXMLWithPull(responseData);
                }catch(Exception e){
                    e.printStackTrace();

                }
            }
        }).start();
    }
    private void parseXMLWithPull(String xmlData){//解析函数
        try{
            XmlPullParserFactory factory= XmlPullParserFactory.newInstance();获取XmlPullParserFactory实例
            XmlPullParser xmlPullParser=factory.newPullParser();获取XmlPullParser实例
            xmlPullParser.setInput(new StringReader(xmlData));将返回的数据设置进去
            int eventType=xmlPullParser.getEventType();//设置初始节点。 
            String id="";
            String name="";
            String version="";
            while(eventType!=XmlPullParser.END_DOCUMENT){
                String nodename =xmlPullParser.getName();
                switch(eventType){//判断标签类型
                    //开始解析某个节点
                    case XmlPullParser.START_TAG:{//开始标签
                        if("id".equals(nodename)){
                            id=xmlPullParser.nextText();
                        }else if("name".equals(nodename)){
                            name=xmlPullParser.nextText();
                        }else if("version".equals(nodename)){
                            version=xmlPullParser.nextText();
                        }
                        break;
                    }
                    //完成解析某个节点
                        case XmlPullParser.END_TAG:{//结束标签
                            if("app".equals(nodename)){
                                Log.d("mainActivity2","id is"+id);
                                Log.d("mainActivity2","name is"+name);
                                Log.d("mainActivity2","version is"+version);
                            }
                            break;
                        }
                    default:
                        break;
                }
               eventType =xmlPullParser.next();移向下一个节点。
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    private void showResponse(final String response){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //在这里UI操作,将结果显示到界面上
                responseText.setText(response);
            }
        });
    }
}


XML文件代码如下
<apps>
<app>
<id>1</id>
<name>Google Maps</name>
<version>1.0</version>
</app>
<app> 
<id>2</id>
<name>Chrome</name>
<version>2.1</version>
</app>
<app>
<id>3</id>
<name>google play</name>
<version>2.3</version>
</app>
</apps>
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
}



猜你喜欢

转载自blog.csdn.net/qq_41105058/article/details/80382505