零碎*学习安卓开发——使用网咯技术

WebView

可以在应用程序中嵌入一个浏览器,可以不跳转到浏览器应用展示网页。

WebView webView = (WebView)findByViewId();
webView.getSettings().setJavaScriptEnabled(true); //设置一些浏览器属性
webView.setWebViewClient(new WebViewClient()); 
webView.loadUrl("http://www.baidu.com");  

本控件访问了网络,需要申请权限:INTERNET


使用HTTP协议访问网络

WebView已经在后台已经对发送HTTP请求、接受服务响应、解析返回数据、展示页面进行了封装。且WebView还有很多更高级的用法,《第一行代码》不做深入探讨。

Android6.0抛弃HttpClient后,发送HTTP请求则剩下使用HttpURLConnection。

private void sendRequestWithHttpURLConnection(){    //发送HTTP请求的方法
    new Thread(new Runnable(){     //开启一个子线程用于发送Http请求
        public void run(){
            HttpURLConnection connection = null;
            NifferedReader reader = null;
            try{
                URL url = new URL("https://www.baidu.com");  //设置URL对象
                connection = (HTttpURLConnection)url.openConnection(); //获取HttpURLConnection实例
                connection.setRequestMethod("GET");  //设置请求方法
                connection.setConnectTimeout(8000);  //设置连接超时
                connection.setReadTimeout(8000);  //设置读取超时,还可以设置希望得到的消息头等
                InputStream in = connection.getInputStream();  //调用getInputStream获取返回的输入流
                reader = new BufferedReader(new InputStreamReader(in)); //对输入流读取
                StringBuilder reponse = new StringBuilder();
                String line;
                while((line = read.readLine()) != null){
                    reponse.append(line);
                }
            catch(Exception e){
                e.printStackTrace();
            }
            finally{
                if(reader != null){
                    try{
                        reader.close();   //关闭读取流
                    }
                    catch(IOException e){
                        e.printStackTrace();
                    }
                }
                if(connection != null){
                    connection.disconnect();   //在finally中将connection链接关闭
                }
            }
        }
    }).start();   //开启线程
}

在子线程中要进行UI操作需要切换到主线程,使用runOnUiThread()方法。

通过HTTP提交数据给服务器:

connection.setRequestMethod("POST");
DataOutputStream out = new DataOutputStream(connection.getOutputStream()); 
out.writeBytes("username=admin&password=123456"); //通过键值对形式,用&分割

使用HttpURLConnection基本步骤:

  1. 通过URL.openConnection()方法获取HttpURLConnection实例。
  2. 设置请求方法(get或post)。
  3. 设置请求属性。 
  4. 获取数据、写出数据。
  5. 关闭各种流,利用HttpURLConnection.disconnect()关闭。

使用其他开源网络通信库代替原生的HttpURLConnection

OkHttp

接口封装简单易用,底层实现自成一派,已成为广大Android开发者首选的网络通信库。主页地址:https://github.com/square/okhttp

添加依赖

...
    implementation 'com.squqreup.okhttp3:okhttp:3.4.1'    //最新版本号在主页上查看
...

具体用法

OkHttpClient client = new OkHttpClient();  //创建一个OkHttpClient实例
Request request = new Request.Builder().[连缀][连缀].build();  //创建一个Request对象以发起Http请求
Response response = client.newCall(request).execute(); //调用OkHttpClient的newCall()方法创建一个Call对象,并调用其execute()方法来发送请求并获取服务器返回的数据
String responseData = response.body().string(); //获取返回的数据

//发起POST请求比GET复杂,需要先构建一个RequestBody对象来存放待提交的参数
RequestBody requestBody = new FormBody.Builder().[][]build(); //连缀可使用add()方法添加键值对参数
Request request = new Request.Builder().[][].buid(); //连缀加入url("http://xxx")和post(requestBody)方法可以设置Request对象的目标地址和传出的数据
  1. 创建一个OkHttpClient实例
  2. 创建request
  3. 创建response
  4. 获取返回的响应体或响应头信息

解析数据

XML使用较少,先跳过学习

解析JSON格式数据

JSON相比于XML,优点在于体积更小,缺点在于语义性较差,不直观。

猜你喜欢

转载自www.cnblogs.com/donkiss/p/10351383.html