Android基础——网络编程
生活随笔
收集整理的這篇文章主要介紹了
Android基础——网络编程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
網(wǎng)絡(luò)編程
- 網(wǎng)絡(luò)編程是什么?
- WebView
- HttpURLConnection訪問網(wǎng)絡(luò)
- HttpURLConnection最佳用法
網(wǎng)絡(luò)編程是什么?
網(wǎng)絡(luò)編程指Android系統(tǒng)使用http協(xié)議和服務(wù)器交互,以傳輸或獲取相關(guān)數(shù)據(jù)。
WebView
Web控件可以讓我們在應(yīng)用程序中嵌入瀏覽器,展示網(wǎng)頁信息。
修改activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"tools:context=".MainActivity"><WebViewandroid:id="@+id/web_view"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>聲明權(quán)限:
<uses-permission android:name="android.permission.INTERNET"/>修改MainActivity:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);WebView webView=findViewById(R.id.web_view);webView.getSettings().setJavaScriptEnabled(true);webView.setWebViewClient(new WebViewClient());webView.loadUrl("https://www.baidu.com");} }HttpURLConnection訪問網(wǎng)絡(luò)
修改activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><Buttonandroid:id="@+id/send_request"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="send_request" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/response_text"android:layout_width="match_parent"android:layout_height="wrap_content" /></ScrollView></LinearLayout>聲明權(quán)限:
<uses-permission android:name="android.permission.INTERNET"/>修改MainActivity
- 通過構(gòu)造函數(shù)創(chuàng)建URL實例,傳入待訪問的地址
- 調(diào)用openConnection()方法獲取HttpURLConnection實例,設(shè)置相關(guān)參數(shù)
- 通過getInputStream()方法獲取到返回的數(shù)據(jù)流并讀取解析
- 調(diào)用disconnect()關(guān)閉連接
若要向服務(wù)器提交數(shù)據(jù),則使用POST:
connection.setRequestMethod("POST"); DataOutputStream outputStream=new DataOutputStream(connection.getOutputStream()); outputStream.writeBytes("username=admin&password=123456");Tips:
HttpURLConnection最佳用法
一個程序可能在很多地方都需要用到網(wǎng)絡(luò),而請求網(wǎng)絡(luò)的代碼是相同的,為避免重復(fù)書寫代碼,我們可以將這部分代碼抽出來作為工具類HttpURLConnectionUtil,當(dāng)需要訪問網(wǎng)絡(luò)時輸入地址即可返回數(shù)據(jù):
public class HttpURLConnectionUtil {public static String sendHttpRequest(String address) {HttpURLConnection connection = null;try {URL url = new URL(address);connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(8000);connection.setReadTimeout(8000);connection.setDoInput(true);connection.setDoOutput(true);InputStream inputStream = connection.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));StringBuilder response = new StringBuilder();String line;while ((line = reader.readLine()) != null) {response.append(line);}return response.toString();} catch (Exception e) {e.printStackTrace();return e.getMessage();} finally {if (connection != null) {connection.disconnect();}}} }Tips:
解決辦法是利用回調(diào)機制,定義接口:
public interface HttpURLConnectionCallback {void onFinish(String response);void onError(Exception e); }修改HttpURLConnectionUtil,加入HttpURLConnectionCallback作為參數(shù):
public class HttpURLConnectionUtil {public static void sendHttpRequest(final String address, final HttpURLConnectionCallback callback) {new Thread(new Runnable() {@Overridepublic void run() {HttpURLConnection connection = null;try {URL url = new URL(address);connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(8000);connection.setReadTimeout(8000);connection.setDoInput(true);connection.setDoOutput(true);InputStream inputStream = connection.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));StringBuilder response = new StringBuilder();String line;while ((line = reader.readLine()) != null) {response.append(line);}if (callback != null) {callback.onFinish(response.toString());}} catch (Exception e) {if (callback != null) {callback.onError(e);}} finally {if (connection != null) {connection.disconnect();}}}}).start();} }當(dāng)使用時,通過onFinish()方法返回數(shù)據(jù),onError()方法處理異常:
HttpURLConnectionUtil.sendHttpRequest("https://www.baidu.com", new HttpURLConnectionCallback() {@Overridepublic void onFinish(String response) {}@Overridepublic void onError(Exception e) {}});此外,還可以使用開源庫OkHttp訪問網(wǎng)絡(luò).
總結(jié)
以上是生活随笔為你收集整理的Android基础——网络编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 火狐浏览器安装Vue.js devtoo
- 下一篇: matlab 绘制一分钟k线图,手工绘制