网络获取数据(基础)

网络获取数据

  1. HttpClint已弃用(API数量过多,扩展困难)

  2. HttpURLConnection

    public static void sendHttpRequest(final String address, final HttpCallbackListener listener) {
       new Thread(new Runnable() {
           @Override
           public void run() {
               HttpURLConnection connection = null;
               try {
                   URL url = new URL(address);
                   connection = (HttpURLConnection) url.openConnection();//6
                   connection.setRequestMethod("GET");
                   connection.setConnectTimeout(8000);
                   connection.setReadTimeout(8000);
                   connection.setDoInput(true);
                   connection.setDoOutput(true);
                   InputStream in = connection.getInputStream();//6
                   BufferedReader reader = new BufferedReader(new InputStreamReader(in));//6
                   StringBuilder response = new StringBuilder();//6
                   String line;//6
                   while ((line = reader.readLine()) != null) {//6
                       response.append(line);//6
                   }//6
                   if (listener != null) {
                       // 回调onFinish()方法
                       listener.onFinish(response.toString());
                   }
               } catch (Exception e) {
                   if (listener != null) {
                       // 回调onError()方法
                       listener.onError(e);
                   }
               } finally {
                   if (connection != null) {
                       connection.disconnect();
                   }
               }
           }
       }).start();
    }
  3. 使用okhttp

    public static void sendOkHttpRequest(final String address, final okhttp3.Callback callback) {
       OkHttpClient client = new OkHttpClient();
       Request request = new Request.Builder()
               .url(address)
               .build();
       client.newCall(request).enqueue(callback);
    }
  4. 解析xml文件pull

    private void parseXMLWithPull(String xmlData) {
       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();
                       } 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("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) {
           e.printStackTrace();
       }
    }
  5. xml数据sax解析

    private void parseXMLWithSAX(String xmlData) {
       try {
           SAXParserFactory factory = SAXParserFactory.newInstance();//初始化工厂
           XMLReader xmlReader = factory.newSAXParser().getXMLReader();//获取解析类,解析类中获取读取类
           ContentHandler handler = new ContentHandler();
           // 将ContentHandler的实例设置到XMLReader中
           xmlReader.setContentHandler(handler);
           // 开始执行解析
           xmlReader.parse(new InputSource(new StringReader(xmlData)));
       } catch (Exception e) {
           e.printStackTrace();
       }
    }
    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 {
           super.endDocument();
       }
    
    }
  6. xml数据dom解析 当做一个文档整个读入,效率低, sax和pull,sax开始之后不能停止,pull更加好

  7. gson解析json数据

    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());
       }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值