不同方式获取网络数据

版权声明:欢迎评论 https://blog.csdn.net/halaoda/article/details/80116142

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

使用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);
}

解析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();
   }
}

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

}

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

猜你喜欢

转载自blog.csdn.net/halaoda/article/details/80116142