2016年6月20日 星期一

Andorid 網頁顯示於APP

出處

如何直接從網頁取得資料並顯示在APP中(APP開發範例台銀匯率)

如何直接從網頁取得資料並顯示在APP中(APP開發範例台銀匯率)

完成畫面:


最近的實用範例
因該是每個領域都會用到的,
就是如何可以把某網站的網頁資料即時的顯示在手機之中
所以,
要能解決兩個最大的問題,
1.APP如何連結網頁,並將網頁的HTML資料下載。
2.用字串類別的尋找與切字串函數,把需要的資料切下來
要完成以上動作不難,
但需要幾部分知識,
1.基礎元件使用,這範例只使用TextView、Spinner、Button,
當然也可以改為自己學的更好的顯示方式,如ListView或結合資料庫。
2.如何下載網路上的資料

相關連結:
JAVA程式設計第2次上課(環境安裝與變數與Math類別)
艾鍗JAVA物件導向程式設計2(流程控制)
JAVA物件導向設計第2堂課:JSP與APP跳板
從JAVA入門到智慧型手機設計第1次上課
Android開發實務下拉清單Spinner與樣板
Android開發實務範例全民英檢查詢APP
如何在Android APP的ListView 元件同時加上圖與字

上課內容:
01_台銀匯率畫面

02_需要的匯率HTML程式碼

03_將網頁轉到APP上顯示幣別

03_手機上直接顯示網頁裡的美金利率

<iframe width="420" height="315" src="https://www.youtube.com/embed/awuOeOKcmJA" frameborder="0" allowfullscreen></iframe>


activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
        <TextView
            android:id="@+id/T01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10px"
            android:text="台幣  換 "
            android:textColor="#000000"
            android:textSize="30sp" />
        <Spinner
            android:id="@+id/SP01"
            android:layout_width="101dp"
            android:layout_height="48dp"
            android:layout_marginTop="10px"
            android:layout_weight="0.75"
            android:entries="@array/money"
            android:prompt="@string/title" />
        <Button
            android:id="@+id/B01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10px"
            android:text="匯率"
            android:textSize="22sp" />
    </LinearLayout>
</LinearLayout>
Strings
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, OnlineMoney!</string>
    <string name="app_name">OnlineMoney</string>
    <string-array name="money">
        <item>美金</item>
        <item>港幣</item>
        <item>英鎊</item>
        <item>澳幣</item>
        <item>加拿大幣</item>
        <item>新加坡幣</item>
        <item>瑞士法郎</item>
        <item>日圓</item>
        <item>南非幣</item>
        <item>瑞典幣</item>
        <item>紐元</item>
        <item>泰幣</item>
        <item>菲國比索</item>
        <item>印尼幣</item>
        <item>歐元</item>
        <item>韓元</item>
        <item>越南盾</item>
        <item>馬來幣</item>
        <item>人民幣</item>
    </string-array>
    <string name="title">請選擇幣別</string>
</resources>
程式碼:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;
public class OnlineMoney extends Activity {
        // 1.宣告
        Spinner s;
        Button button;
        
        String WebURL = "http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm";
        List<String> buy_cash;
        List<String> sell_cash;
        List<String> buy_current_rate;
        List<String> sell_current_rate;
        int itemIndex = 0;
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                // 2.連結
                s = (Spinner) findViewById(R.id.SP01);
                button = (Button) findViewById(R.id.B01);
                
                buy_cash = new ArrayList<String>();
                sell_cash = new ArrayList<String>();
                buy_current_rate = new ArrayList<String>();
                sell_current_rate = new ArrayList<String>();
                String urlData = null;
                urlData = GetURLData();
                Parser(urlData);
                //3.事件1        
                s.setOnItemSelectedListener(new OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> arg0, View arg1,
                                        int arg2, long arg3) {
                                // TODO Auto-generated method stub
                                itemIndex = arg2;
                        }
                        @Override
                        public void onNothingSelected(AdapterView<?> arg0) {
                                // TODO Auto-generated method stub
                        }
                });
                //4.事件2        
                button.setOnClickListener(new Button.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                new AlertDialog.Builder(OnlineMoney.this)
                                                .setTitle("選擇匯率為:")
                                                .setMessage(
                                                                "現金匯率:\n買入=" + buy_cash.get(itemIndex)
                                                                                + "\n賣出=" + sell_cash.get(itemIndex)
                                                                                + "\n\n即期匯率:\n買入="
                                                                                + buy_current_rate.get(itemIndex)
                                                                                + "\n賣出="
                                                                                + sell_current_rate.get(itemIndex))
                                                .setPositiveButton("確定", null).show();
                        }
                });
        }
        //讀取所有的網頁HTML原始碼並回傳結果
        public String GetURLData() {
                String urlData = null;
                String decodedString;
                try {
                        //建立連線物件
                        HttpURLConnection hc = null;
                        //建立網址物件
                        URL url = new URL(WebURL);
                        //連線
                        hc = (HttpURLConnection) url.openConnection();
                        //hc.setRequestMethod("GET");
                        hc.setDoInput(true);
                        hc.setDoOutput(true);
                        hc.connect();
                        //用BufferedReader讀回來
                        BufferedReader in = new BufferedReader(new InputStreamReader(
                                        hc.getInputStream()));
                        while ((decodedString = in.readLine()) != null) {
                                urlData += decodedString;
                        }
                        in.close();
                } catch (Exception e) {
                        Log.e("ERROR", e.toString());
                }
                return urlData;
        }
        public void Parser(String urlData) {
                String temp = null;
                int start = 0;
                int end = 0;
                int counter = 0;
                do {
                        start = urlData.indexOf("<td class=\"decimal\">", end + 1);
                        end = urlData.indexOf("</td>", start + 1);
                        temp = urlData.substring(start + 20, end);
                        if (!temp.equals("-"))
                                buy_cash.add(temp);
                        else
                                buy_cash.add("無資料");
                        start = urlData.indexOf("<td class=\"decimal\">", end + 1);
                        end = urlData.indexOf("</td>", start + 1);
                        temp = urlData.substring(start + 20, end);
                        if (!temp.equals("-"))
                                sell_cash.add(temp);
                        else
                                sell_cash.add("無資料");
                        start = urlData.indexOf("<td class=\"decimal\">", end + 1);
                        end = urlData.indexOf("</td>", start + 1);
                        temp = urlData.substring(start + 20, end);
                        if (!temp.equals("-"))
                                buy_current_rate.add(temp);
                        else
                                buy_current_rate.add("無資料");
                        start = urlData.indexOf("<td class=\"decimal\">", end + 1);
                        end = urlData.indexOf("</td>", start + 1);
                        temp = urlData.substring(start + 20, end);
                        if (!temp.equals("-"))
                                sell_current_rate.add(temp);
                        else
                                sell_current_rate.add("無資料");
                        counter++;
                } while (counter < 19);
        }
}
AndroidManifest.xml
    <uses-permission android:name="android.permission.INTERNET" />

沒有留言:

張貼留言