Android基础——网络编程
生活随笔
收集整理的這篇文章主要介紹了
Android基础——网络编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網絡編程
- 網絡編程是什么?
- WebView
- HttpURLConnection訪問網絡
- HttpURLConnection最佳用法
網絡編程是什么?
網絡編程指Android系統使用http協議和服務器交互,以傳輸或獲取相關數據。
WebView
Web控件可以讓我們在應用程序中嵌入瀏覽器,展示網頁信息。
修改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>聲明權限:
<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訪問網絡
修改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>聲明權限:
<uses-permission android:name="android.permission.INTERNET"/>修改MainActivity
- 通過構造函數創建URL實例,傳入待訪問的地址
- 調用openConnection()方法獲取HttpURLConnection實例,設置相關參數
- 通過getInputStream()方法獲取到返回的數據流并讀取解析
- 調用disconnect()關閉連接
若要向服務器提交數據,則使用POST:
connection.setRequestMethod("POST"); DataOutputStream outputStream=new DataOutputStream(connection.getOutputStream()); outputStream.writeBytes("username=admin&password=123456");Tips:
HttpURLConnection最佳用法
一個程序可能在很多地方都需要用到網絡,而請求網絡的代碼是相同的,為避免重復書寫代碼,我們可以將這部分代碼抽出來作為工具類HttpURLConnectionUtil,當需要訪問網絡時輸入地址即可返回數據:
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:
解決辦法是利用回調機制,定義接口:
public interface HttpURLConnectionCallback {void onFinish(String response);void onError(Exception e); }修改HttpURLConnectionUtil,加入HttpURLConnectionCallback作為參數:
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();} }當使用時,通過onFinish()方法返回數據,onError()方法處理異常:
HttpURLConnectionUtil.sendHttpRequest("https://www.baidu.com", new HttpURLConnectionCallback() {@Overridepublic void onFinish(String response) {}@Overridepublic void onError(Exception e) {}});此外,還可以使用開源庫OkHttp訪問網絡.
總結
以上是生活随笔為你收集整理的Android基础——网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 火狐浏览器安装Vue.js devtoo
- 下一篇: android sina oauth2.