出處
如何直接從網頁取得資料並顯示在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開發實務範例全民英檢查詢APP
如何在Android APP的ListView 元件同時加上圖與字
上課內容:
01_台銀匯率畫面
02_需要的匯率HTML程式碼
03_將網頁轉到APP上顯示幣別
03_手機上直接顯示網頁裡的美金利率
完成畫面:
最近的實用範例,
因該是每個領域都會用到的,
就是如何可以把某網站的網頁資料,即時的顯示在手機之中,
所以,
要能解決兩個最大的問題,
1.APP如何連結網頁,並將網頁的HTML資料下載。
2.用字串類別的尋找與切字串函數,把需要的資料切下來。
要完成以上動作不難,
但需要幾部分知識,
1.基礎元件使用,這範例只使用TextView、Spinner、Button,
當然也可以改為自己學的更好的顯示方式,如ListView或結合資料庫。
2.如何下載網路上的資料
相關連結:
JAVA程式設計第2次上課(環境安裝與變數與Math類別)
艾鍗JAVA物件導向程式設計2(流程控制)
JAVA物件導向設計第2堂課:JSP與APP跳板
從JAVA入門到智慧型手機設計第1次上課
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" />
沒有留言:
張貼留言