1. 程式人生 > >Android之WebView與URLConnection

Android之WebView與URLConnection

demo

java程式碼:

public class MainActivity extends Activity implements View.OnClickListener {
    private TextView mTextViewDetail;
    private TextView mTextViewFalse;
    private ProgressBar mProgressBarWeb;

    private Button mButtonDetail;
    private Button mButtonUrl;

    //網頁的載入需要ConnectivityManager
private ConnectivityManager mManager; private WebView mWebView; private WebSettings mWs; public static final int GET_URL_MESSAGE = 0x99; //handler用於接收URLConnection傳遞的訊息 private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch
(msg.what){ case GET_URL_MESSAGE: mTextViewDetail.setText(msg.obj.toString()); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextViewDetail = (TextView) findViewById(R.id.text_detail); mTextViewFalse = (TextView) findViewById(R.id.text_web_false); mProgressBarWeb = (ProgressBar) findViewById(R.id.progressBar_web); mButtonDetail = (Button) findViewById(R.id.button_detail); mManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); mButtonDetail.setOnClickListener(this
); mButtonUrl = (Button) findViewById(R.id.button_url); mButtonUrl.setOnClickListener(this); //WebView用來顯示網頁 mWebView = (WebView) findViewById(R.id.webView_test); //mWs的作用是載入一個Zoom,功能是放大或縮小網頁 mWs = mWebView.getSettings(); mWs.setSupportZoom(true); mWs.setBuiltInZoomControls(true); //監聽網頁載入前後和網頁載入錯誤的事件 mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); mProgressBarWeb.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); mProgressBarWeb.setVisibility(View.INVISIBLE); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { //super.onReceivedError(view, errorCode, description, failingUrl); mWebView.setVisibility(View.GONE); mTextViewFalse.setVisibility(View.VISIBLE); Toast.makeText(getApplicationContext(), "同步載入失敗", Toast.LENGTH_SHORT).show(); } }); //網頁載入中的監聽需要呼叫此方法 mWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); mProgressBarWeb.setProgress(newProgress); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (mWebView.canGoBack()) { mWebView.goBack(); return true; } else { MainActivity.this.finish(); } } return super.onKeyDown(keyCode, event); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_detail: //loadUrl中傳入網頁地址 mWebView.loadUrl("http://www.bjlingzhuo.com/"); //NetWorkInfo用來得到網頁的一些資訊 NetworkInfo info = mManager.getActiveNetworkInfo(); if (info != null && info.isConnected()) { mTextViewDetail.setText("網路型別:" + info.getTypeName()); } else { mTextViewDetail.setText("無網路連線"); } break; case R.id.button_url: new Thread(new Runnable() { @Override public void run() { urlConnectServerLet(); } }).start(); break; default: break; } } /** * URLConnection載入網頁的方法 */ private void urlConnectServerLet() { try { URL url = new URL("http://www.bjlingzhuo.com"); //需要一個URLConnection開啟網頁 URLConnection connection = url.openConnection(); InputStream is = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); StringBuffer buffer = new StringBuffer(); while (line != null) { buffer.append(line); line = br.readLine(); } is.close(); Message message = mHandler.obtainMessage(); message.what = GET_URL_MESSAGE; message.obj = buffer.toString().trim(); mHandler.sendMessage(message); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

佈局:
ScrollView 中最多隻能載入一個控制元件

<ScrollView 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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/button_detail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="網路連線"/>

        <Button
            android:id="@+id/button_url"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="開啟Url連線"/>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/text_detail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""/>

            <ProgressBar
                android:id="@+id/progressBar_web"
                style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="invisible"/>

            <TextView
                android:id="@+id/text_web_false"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="載入失敗"
                android:visibility="invisible"/>

            <WebView
                android:id="@+id/webView_test"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="visible">
            </WebView>

        </FrameLayout>
    </LinearLayout>

</ScrollView>

結果演示:
WebView
這裡寫圖片描述

URLConnection