之前在玩 PhoneGap 的時候,就有想過能不能在 javascript 裡面就直接調用 Android Java 的 class,答案是可以的,Android 的官方文件的 WebView 教學,就有教怎麼去使用,下面稍微做個範例
1. 在要執行的頁面 (XXX.XML) 檔裡放入一個 WebView 如下
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
2. 進入 AndroidManifest.xml 檔裡開啟權限
<uses-permission android:name="android.permission.INTERNET"/>
3. 在執行的 java 檔裡 (src/your_package/你要執行的 java 檔案 ex. MainActivity.java) 寫入下列程式碼
//先把在頁面中呈現的 WebView 註冊,接著就能用 webview 執行底下的方法
WebView webview= (WebView) findViewById(R.id.webView);
//設定一個 Javascript 的 Interface,前面是指這邊這個物件,後面是要註冊的名稱,這邊先將它取名為 test
webview.addJavascriptInterface(this, "test");
//接著將 JavaScript 的設定開起來
webview.getSettings().setJavaScriptEnabled(true);
//指向設定預定呈現的頁面,此處我是將檔案放在 assets/www/ 底下,www 資料夾為自行創建
webview.loadUrl("file:///android_asset/www/index.html");
//在 onCreate() 外面創建一個 function,也是在同一支程式檔裡,上面 addJavascriptInterface this 就代表指向的檔案
public void javascripCall(){
log.d("javascrip_call","test");
}
4. 在 index.html 裡,可直接執行 javascript 程式碼,也可使用 <script type="text/javascript" src="js/xxx.js"></script> 檔案引入的方式,都是可行的
而在 index,html 裡的 javascript 碼,只要照著剛剛設定的名稱進行呼叫,就可以直接調用 Java 的 function
<script type="text/javascript">
callAndroidJava = function(){
test.javascripCall();
}
</script>
2012年12月25日 星期二
2012年11月27日 星期二
Java ArrayList<Object>的用法,Android 寫法
ArrayList<Object>是一種還蠻方便的定義存放資料的方法,可支援存放不同屬性的物件在裡面
首先先設定一個類別存放資料
class Object_list{
// TODO 設定 List Object
String first_string;
String second_string;
int first_number;
}
設定好了之後,可撰寫一個呼叫此類別的方法,之後會比較方便
class Object_list_example {
public List<Object_list> call_list_example(){
// TODO 存值入 List<Object_list_example>
List<Object_list> li = new ArrayList<Object_list>();
Object_list ob; //如果class Object_list不是在同一個頁面的話記得要new Object_list 出來
for(int i = 0; i< 5 ; i++){
ob = new Object_list(); //NEW 一個物件,如果不寫在迴圈裡便會重複寫入
ob.first_string = " "+i; //將資料存入 Object_list 裡的 first_string
ob.first_number = i; //將資料存入 Object_list 裡的 first_number
li.add(ob); //將資料塞進 List<Object> 裡
}
return li;
}
}
設定好資料內部屬性以及呼叫方法之後,接下來便是實作
public class Call_list_object{
public void call_list_object(){
// TODO 呼叫 List<Object_list_example>
Object_list_example li_example = new Object_list_example();
List<Object_list> li = li_example.call_list_example();
for(int i =0; i<li.size(); i++){
// 印出 li 裡的 first_string 字串,這會出現在Logcat裡,如果是Java可直接print出來
Log.d("List print first_string value", li.get(i).first_string);
}
}
}
印出結果為
List print first_string value 0
List print first_string value 1
List print first_string value 2
List print first_string value 3
List print first_string value 4
PS.前面有提過的,如果不把這段 ob = new Object_list(); 加在程式碼裡,便會重複寫入最後一個數字印出結果為
List print first_string value 4
List print first_string value 4
List print first_string value 4
List print first_string value 4
List print first_string value 4
與資料庫的搭配用法之後會再繼續寫
ArrayList<Object>是一種還蠻方便的定義存放資料的方法,可支援存放不同屬性的物件在裡面
首先先設定一個類別存放資料
class Object_list{
// TODO 設定 List Object
String first_string;
String second_string;
int first_number;
}
設定好了之後,可撰寫一個呼叫此類別的方法,之後會比較方便
class Object_list_example {
public List<Object_list> call_list_example(){
// TODO 存值入 List<Object_list_example>
List<Object_list> li = new ArrayList<Object_list>();
Object_list ob; //如果class Object_list不是在同一個頁面的話記得要new Object_list 出來
for(int i = 0; i< 5 ; i++){
ob = new Object_list(); //NEW 一個物件,如果不寫在迴圈裡便會重複寫入
ob.first_string = " "+i; //將資料存入 Object_list 裡的 first_string
ob.first_number = i; //將資料存入 Object_list 裡的 first_number
li.add(ob); //將資料塞進 List<Object> 裡
}
return li;
}
}
設定好資料內部屬性以及呼叫方法之後,接下來便是實作
public class Call_list_object{
public void call_list_object(){
// TODO 呼叫 List<Object_list_example>
Object_list_example li_example = new Object_list_example();
List<Object_list> li = li_example.call_list_example();
for(int i =0; i<li.size(); i++){
// 印出 li 裡的 first_string 字串,這會出現在Logcat裡,如果是Java可直接print出來
Log.d("List print first_string value", li.get(i).first_string);
}
}
}
印出結果為
List print first_string value 0
List print first_string value 1
List print first_string value 2
List print first_string value 3
List print first_string value 4
PS.前面有提過的,如果不把這段 ob = new Object_list(); 加在程式碼裡,便會重複寫入最後一個數字印出結果為
List print first_string value 4
List print first_string value 4
List print first_string value 4
List print first_string value 4
List print first_string value 4
與資料庫的搭配用法之後會再繼續寫
訂閱:
文章 (Atom)