简单的网络技术及数据解析

原创 2016年05月31日 21:58:17
网络技术:

1 WebView访问网络:

public class MainActivity extends Activity {

    private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView)findViewById(R.id.web_view);
        //让WebView支持javaScript脚本
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("http://192.168.1.105:8080/");


    }
}

加个权限:
<uses-permission android:name="android.permission.INTERNET"/>


2 开启线程发送网络请求

    两种方式:
    1 HttpClient
    private void sendRequesWithHttpClient() {

        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

                try {

                    HttpClient httpClient = new DefaultHttpClient();
                    HttpGet httpGet = new HttpGet(
                            "http://www.360.com");
                    HttpResponse httpResponse = httpClient.execute(httpGet);

                    if (httpResponse.getStatusLine().getStatusCode() == 200) {


                        HttpEntity httpEntity = httpResponse.getEntity();

                        String response = EntityUtils.toString(httpEntity,"utf-8");

                        //把结果传递到message
                        Message message = new Message();
                        message.what = SHOW_RESPONSE;

                        message.obj = response.toString();
                        //发送message到handler
                        handler.sendMessage(message);

                    }

                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }

        }).start();
    }

    2 HttpURLConnection

    private void sendRequestWithHttpURLConnection() {
        // 
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection = null;
                try {
                    URL url = new URL("http://www.360.com");
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);
                    connection.setDoInput(true);
                    connection.setDoOutput(true);
                    InputStream in = connection.getInputStream();
                    // 高效读入流
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(in));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        response.append(line);
                    }
                    Message message = new Message();
                    message.what = SHOW_RESPONSE;
                    // 发送数据
                    message.obj = response.toString();
                    handler.sendMessage(message);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (connection != null) {
                        connection.disconnect();
                    }
                }
            }
        }).start();
    }

1 2 都要结合一个Handler 即

    private Handler handler = new Handler(){
        public void handleMessage(Message msg){
            switch (msg.what) {
            case SHOW_RESPONSE:
                String response = (String)msg.obj;
                //在这里进行Ui操作,把结果显示到TextView中
                text.setText(response);
                break;

            default:
                break;
            }
        }
    };

Url的链接不要用www.baidu.com 


网络传输数据的解析:XML  和    JSON 

XML:
第一种方式Pull解析


第二种SAX 首先要新建一个类继承DefaultHandler

public class ContentHandler extends DefaultHandler {

    private String nodeName ;
    private StringBuilder id;
    private StringBuilder name;
    private StringBuilder version;


    @Override
    public void startDocument() throws SAXException{
        id = new StringBuilder();
        name = new StringBuilder();
        version = new StringBuilder();
    }

    @Override
    public void startElement(String uri,String localName,String qName,
            Attributes attributes) throws SAXException{
        //记录当前的结点名
        nodeName = localName;
    }

    @Override
    public void characters(char[] ch,int start,int length) throws SAXException{
        //根据当前的结点名判断将内容添加到不同的StringBuilder对象中
        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{

        if("app".equals(localName)){
            Log.d("ContentHandler", "id is "+id.toString().trim());
            Log.d("ContentHandler", "name is "+name.toString().trim());
            Log.d("ContentHandler", "version is "+version.toString().trim());

            //最后把StringBuilder清空,否则会影响下一次的读取
            id.setLength(0);
            name.setLength(0);
            version.setLength(0);
        }
    }

    @Override
    public void endDocument() throws SAXException{

    }
}

然后再到MianActivity调用



JSON格式:
    解析方式:
    1 JSONObject
    //json的JSONObject解析
    private void parseJSONWithJSONObject(String jsondata){

        try {
            JSONArray jsonArray = new JSONArray(jsondata);

            for(int i=0;i<jsonArray.length();i++){
                JSONObject jsonObject = jsonArray.getJSONObject(i);

                String id  = jsonObject.getString("id");
                String name = jsonObject.getString("name");
                String version = jsonObject.getString("version");

                Log.d("id", "id is "+id);
                Log.d("name", "name is "+name);
                Log.d("version", "version is "+version);

            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

    2 GSON 


    //json的GSON的解析方式---google开源
    //GSON能够把数据自动映射成一个对象,省了代码量
    //所以在这里我先新建一个App类
    //前提是要有GSON.jar包
    private void parseJSONWithGSON(String jsondata){
        Gson gson = new Gson();
        List<App> applist = gson.fromJson(jsondata, new TypeToken<List<App>>(){}.getType());

        for(App app:applist){
            Log.d("MainActivity", "id is "+app.getId());
            Log.d("MainActivity", "name is "+app.getName());
            Log.d("MainActivity", "version is "+app.getVersion());
        }
    }

然后再到MainActivity调用

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

    }

    private void sendRequesWithHttpClient() {
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

                try {

                    HttpClient httpClient = new DefaultHttpClient();
                    HttpGet httpGet = new HttpGet(
                            "http://localhost:8080/Hello/data.xml");
                    HttpResponse httpResponse = httpClient.execute(httpGet);

                    if (httpResponse.getStatusLine().getStatusCode() == 200) {
                        HttpEntity httpEntity = httpResponse.getEntity();

                        String response = EntityUtils.toString(httpEntity);

                        parseXMLWithPull(response);

                    }

                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }

        }).start();
    }


    //SAX解析XML方法,与Pull解析的区别就是层次清晰
    //要新建一个ContentHandler extends DefaultHander{
        //重写五个方法
    //}
    private void parseXMLWithSAX(String xmldata){
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();

            XMLReader xmlReader = factory.newSAXParser().getXMLReader();

            ContentHandler handler = new ContentHandler();

            xmlReader.setContentHandler(handler);

            //开始解析
            xmlReader.parse(new InputSource(new StringReader(xmldata)));
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }


    private void parseXMLWithPull(String xmldata) {
        // TODO Auto-generated method stub
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

            XmlPullParser xmlPullParser = factory.newPullParser();

            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();

                    }
                    if ("name".equals(nodeName)) {
                        id = xmlPullParser.nextText();

                    }
                    if ("version".equals(nodeName)) {
                        id = xmlPullParser.nextText();

                    }
                    break;

                }
                case XmlPullParser.END_TAG: {
                    if ("app".equals(nodeName)) {
                        Log.d("MainActivity", "id is " + id);
                        Log.d("MainActivity", "name is " + name);
                        Log.d("MainActivity", "version is " + version);
                    }
                    break;
                }
                default:
                    break;
                }
                eventType = xmlPullParser.next();
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}


注意:以上数据的解析全部要以本电脑创建本地服务器并在wenapp目录下新建.xml
和.json 文件,同时保证在公网的情况下(即android端和电脑端同一个网络)进行访问
否则则访问不到

同时也别忘了添加权限
版权声明:本文为博主原创文章,未经博主允许不得转载。

Kotlin简单网络请求及数据解析

一,网络请求 以下是在Android下用最基础的进行网络请求方法,但获取的数据量大的话就不能用这个方法了 1,定义网络连接地址         val  url  =   " ",因为地址不需要...
  • qq_30305669
  • qq_30305669
  • 2017年12月13日 12:16
  • 30

《华为技术认证HCNA网络技术实验指南》参考配置

《华为技术认证HCNA网络技术实验指南》参考配置 Huawei Certified Network Engineer(华为认证网络工程师)HCNA系列认证是华为职业认证中用于标识个人能力在某...
  • chengying332
  • chengying332
  • 2015年04月10日 17:13
  • 670

网络技术新名词笔记(by quqi99)

作者:张华  发表于:2015-08-28版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 )eBPF(...
  • quqi99
  • quqi99
  • 2015年08月28日 15:53
  • 1608

Android中的网络技术基础用法

有的时候用多了Android的一些开源框架用多了,就会把最基础的一些东西给忘了,今天来重温一下Android的网络基础。包括这个Http协议的网络请求,JSON解析。使用HTTP协议访问网络在 And...
  • cgq1030699125
  • cgq1030699125
  • 2016年06月22日 17:50
  • 4499

网络技术基本认识

IP协议:用于将多个包在交换网络中连接起来的,在源地址和目的地址之间的传送数据包的东西,还可以对数据包进行分片和重组。 子网掩码:用来划分网络地址与主机地址,通过位与运算(and)实现。 默认网关:一...
  • BISHOP0125
  • BISHOP0125
  • 2015年12月23日 23:46
  • 167

一路走来之“华为网络技术大赛”

博客链接: http://codeshold.me/2017/05/ntec.html参赛历程 在参加华为软件精英挑战赛的校园宣讲时,一位HR姐姐告诉我“你可以多报几个比赛啊?”,于是乎,对网络技术感...
  • wuzhimang
  • wuzhimang
  • 2017年06月04日 20:12
  • 1013

2016年华为网络技术精英大赛复赛试题

2016年华为网络技术精英大赛复赛试题 【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51354514 1 实验考试说...
  • guyuealian
  • guyuealian
  • 2016年05月21日 16:15
  • 8444

华为网络技术大赛2017 考后感

有志华为技术服务部的同学应该都会知道华为去年火起来的华为网路大赛。          准备期间, 虽所华为给了一些视频学习资料和pdf资料,其中也讲了一些干货。经过一个月的艰苦奋战,几乎吃透知识点,...
  • weixin_36234980
  • weixin_36234980
  • 2017年04月16日 19:53
  • 1061

为复杂的问题找一个简单的答案

复杂的问题、简单的答案 思考的惰性、理性地判断
  • ds1231h
  • ds1231h
  • 2016年06月15日 00:17
  • 529

网络技术小结

一.    TCP/IP协议栈: 1、ARP:地址解析协议,实现IP地址到MAC地址的映射(ARP请求广播),回收的信息存入本机ARP缓存保留一段时间。ARP是建立在互相信任的机制上的,容易造成AR...
  • u013181216
  • u013181216
  • 2015年08月19日 23:39
  • 711
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的网络技术及数据解析
举报原因:
原因补充:

(最多只允许输入30个字)