在編寫PhoneGap插件時,要傳遞多個參數,需要將參數保存在一個參數數組中,然後PhoneGap會自動將參數數組保存在JSONArray數據中;如果要獲取返回值,需要編寫回調方法將返回值通過參數傳遞到回調方法中,示例代碼如下:
myplugin.js: /** * 構造方法 */ function MyPlugin() {
};
/** * 字符串相加 * * @param str1, str2 */ MyPlugin.prototype.addStr = function(successCallback, failureCallback, str1, str2) { PhoneGap.exec(successCallback, failureCallback, "MyPlugin", "addStr", [str1, str2]); };
/** * 加載MyPlugin對象 */ PhoneGap.addConstructor(function() { PhoneGap.addPlugin("myPlugin", new MyPlugin()); }); |
然後在Java代碼中調用JSONArray的getString(int index)方法獲取JSONArray中的參數,通過index指定參數的索引就可以取得多個參數了;在Java代碼中,返回值是保存在PluginResult對象中的,PluginResult保存了狀態和返回值。如果狀態爲OK,則回調successCallback方法,並將返回值傳遞到該方法中;如果狀態爲JSON_EXCEPTION,則回調failureCallback方法,並將錯誤信息傳遞到該方法中。示例代碼如下:
MyPlugin.java: package com.litsoft.phonegap;
import org.apache.cordova.api.PluginResult; import org.json.JSONArray; import org.json.JSONException;
import com.phonegap.api.Plugin;
public class MyPlugin extends Plugin{
@Override public PluginResult execute(String action, JSONArray args, String callbackId) { PluginResult.Status status = PluginResult.Status.OK; String result = "";
try { if(action.equals("addStr")){ result = addStr(args.getString(0), args.getString(1)); }else{ status = PluginResult.Status.INVALID_ACTION; }
return new PluginResult(status, result); } catch (JSONException e) { return new PluginResult(PluginResult.Status.JSON_EXCEPTION); } }
/** * 兩個字符串相加 * * @param str1 * @param str2 * @return */ private String addStr(String str1, String str2){ return str1 + str2; }
}
|
最後在html中調用插件中的方法,通過調用addStr方法就可以將兩個輸入框的值傳遞到後臺Java代碼中運行,後臺Java將返回值存儲在PluginResult對象中,通過編寫回調方法successCallback就可以獲取返回值了。示例代碼如下:
Index.html: <!DOCTYPE HTML> <html> <head> <title>PhoneGap</title> <script type="text/javascript" charset="utf-8" src="cordova.js"> </script> <script type="text/javascript" charset="utf-8" src="myplugin.js"> </script> <script type="text/javascript" charset="UTF-8">
function add(){ var str1 = document.getElementById("str1Id").value; var str2 = document.getElementById("str2Id").value; window.plugins.myPlugin.addStr(successCallback, failureCallback, str1, str2); } //成功時回調的方法 function successCallback(data){ document.getElementById("resultId").value = data; } //失敗時返回的方法 function failureCallback(data){ alert("error:"+ data); } </script> </head> <body> <input type="text" id="str1Id"/> <br /> <input type="text" id="str2Id" /> <br /> <input type="text" id="resultId" /> <input type="button" value="add" onclick="add();" /> </body> </html> |