安卓如何調用方法
㈠ android 一個活動類如何調用另一個活動類的函數
為什麼要放到Activity裡面?放到Activity裡面為什麼不要static方法?如果內存不足,android系統是可以殺死你的Activity的,這樣你的context可能就是null了。而且Activity不能通過new來獲取……
㈡ android 裡面如何在一個Activity裡面調用另外一個Activity裡面的方法
看看是否因為你的activity是否配置了,如果沒有配置是會直接報錯的。而且可以貼出具體的錯誤信息來,看看哪裡出了問題
㈢ 怎麼在安卓端調用JS的帶參方法
很簡單啊,就是一個html代碼注入的形式,你傳字元串的時候你得注意他那邊接受字元串的形式,我們是雙引號,js是單引號,我就是在做webview和js交互的
JS端就一個function
function setImgUrl(url){
$('#coverImage').val(url);
}
我在安卓端寫的這樣的
webView.loadUrl("javascript:setImgUrl('"+uploadUrl+"')");
㈣ 如何在Android平台上使用JS直接調用Java方法
在Cocos2d-js 3.0beta中加入了一個新特性,在Android平台上我們可以通過反射直接在js中調用java的靜態方法。它的使用方法很簡單:
var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)
在callStaticMethod方法中,我們通過傳入Java的類名,方法名,方法簽名,參數就可以直接調用Java的靜態方法,並且可以獲得Java方法的返回值。下面介紹的類名和方法簽名可能會有一點奇怪,但是Java的規范就是如此的。
類名
參數中的類名必須是包含Java包路徑的完整類名,例如我們在org.cocos2dx.javascript這個包下面寫了一個Test類:
package org.cocos2dx.javascript;
public class Test {
public static void hello(String msg){
System.out.println(msg);
}
public static int sum(int a, int b){
return a + b;
}
public static int sum(int a){
return a + 2;
}
}
那麼這個Test類的完整類名應該是org/cocos2dx/javascript/Test,注意這里必須是斜線/,而不是在Java代碼中我們習慣的點。
方法名
方法名很簡單,就是方法本來的名字,例如sum方法的名字就是sum。
方法簽名
方法簽名稍微有一點復雜,最簡單的方法簽名是()V,它表示一個沒有參數沒有返回值的方法。其他一些例子:
(I)V表示參數為一個int,沒有返回值的方法;
(I)I表示參數為一個int,返回值為int的方法;
(IF)Z表示參數為一個int和一個float,返回值為boolean的方法;
現在有一些理解了吧,括弧內的符號表示參數類型,括弧後面的符號表示返回值類型。因為Java是允許函數重載的,可以有多個方法名相同但是參數返回值不同的方法,方法簽名正是用來幫助區分這些相同名字的方法的。
㈤ android在一個類中調用另一個類的方法
通常來說會用兩種方式:1.通過new一個對象,然後用對象來調用另一個類中的方法。 2.如果是靜態類,那麼可以直接用類名.方法()的方式調用
㈥ Android中如何在一個Activity中調用其他Activity中的函數
其實 這個不算什麼問題吧··
Android中的activity 只是一個普通的java類,你在普通的java類中調另外一個java類的函數 這不是大家都知道的事情嗎? 用new呀 或者做靜態函數呀 或者用反射機制呀 都是辦法。
如果碰到你說的上述情況了 就把那個要調用的函數封裝出來吧 這個才是王道。
㈦ android里如何調用Js里的函數
Android中內置了WebKit模塊,而該模塊的Java層視圖類就是WebView,所有需要使用Web瀏覽器功能的Android都需要創建該視圖類對象顯示和處理請求的網路資源。目前WebKit支持Http、Https、Ftp和JavaScript請求。
1、在Assets下放一個簡單的html文件jstest.html
<HTML>
<HEAD>
<metaname="viewport"content="width=device-width,target-densitydpi=device-dpi"/>
<METAhttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<script>
functionshowMsg(){
alert("helloworld!");
}
functionshowMsgInAndroid(){
myjs.showMsg('helloinandroid!');
}
</script>
</HEAD>
<BODY>
<span>測試js使用</span>
<buttonid='btntest'onclick='showMsgInAndroid()'>調用android方法</button>
</BODY>
</HTML>
2、布局文件main.xml
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayout
android:id="@+id/rl_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<WebView
android:id="@+id/wv_test"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/btn_showmsg"/>
<Button
android:id="@+id/btn_showmsg"
android:layout_width="200dip"
android:layout_height="40dip"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="調用html中js方法"/>
</RelativeLayout>
3、然後是Activity,MainActivity.java
packagecom.harold.jstest;
importcom.harold.base.JSKit;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.webkit.WebChromeClient;
importandroid.webkit.WebView;
importandroid.widget.Button;
{
privateWebViewmWebView;
privateButtonbtnShowInfo;
privateJSKitjs;
privateHandlermHandler=newHandler();
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化控制項
mWebView=(WebView)findViewById(R.id.wv_test);
btnShowInfo=(Button)findViewById(R.id.btn_showmsg);
//實例化js對象
js=newJSKit(this);
//設置參數
mWebView.getSettings().setBuiltInZoomControls(true);
//內容的渲染需要webviewChromClient去實現,
//設置webviewChromClient基類,解決js中alert不彈出的問題和其他內容渲染問題
mWebView.setWebChromeClient(newWebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
//把js綁定到全局的myjs上,myjs的作用域是全局的,初始化後可隨處使用
mWebView.addJavascriptInterface(js,"myjs");
mWebView.loadUrl("file:///android_asset/jstest.html");
btnShowInfo.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
mHandler.post(newRunnable(){
@Override
publicvoidrun(){
//調用HTML中的javaScript函數
mWebView.loadUrl("javascript:showMsg()");
}
});
}
});
}
}
㈧ android 怎麼調用activity的方法
想在一個Activity裡面調用另外一個Activity的方法主要有介面回調和靜態方法。但是除了靜態方法之外,並不推薦介面回調方法。
其中靜態方法實現參考如下表述:
需求:在A activity中調用 B activity的methodB()。
實現:使用靜態實現。
在B方法中定義:
1
public static void methodB(){}
在A中需要使用methodB()的地方這樣調用:
1
B.methodB();
為何不推薦在一個Activity中調用另一個Activity呢。因為Android系統運行內存較小,故其系統會在需要的時候將後台的進程自動清理掉以為當前進程提供運行內存。而android移動設備除了當前正在顯示的activity意外,其他的activity都在後台運行。例如你在A activity中調用B activity 的方法時候,有可能B activity已經被銷毀,所以,只能使用B activity的靜態方法。
最後的做法是將Activity界面顯示和邏輯分開寫在不同的類中,這樣才復合程序開發的MVC框架還有Java編程的面向對象思想。
㈨ 開發安卓時如何調用同一個包不同.Java文件裡面的方法
publicclassA{
publicA(){
System.out.println("調用了A類的構造方法");
}
voida(){
System.out.println("調用了A類的方法a");
}
}
publicclassB{
publicstaticvoidmain(Stringargs[]){
Aa=newA();
a.a();
}
}
如果是android的話,直接把main函數換成onCreate(這樣你B類必須是Activity)就可以了
㈩ android 怎麼調用jni裡面的方法
調用jni裡面的方法,過程如下:
第一步:
使用Java編寫HelloWorld 的Android應用程序:
package com.lucyfyr;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.v("fresne", printJNI("I am HelloWorld Activity"));
}
static
{
//載入庫文件
System.loadLibrary("HelloWorldJni");
}
//聲明原生函數 參數為String類型 返回類型為String
private native String printJNI(String inputStr);
}
這一步我們可以使用eclipse來生成一個App;
因為eclipse會自動為我們編譯此Java文件,後面要是用到。
第二步:
生成共享庫的頭文件:
進入到eclipse生成的Android Project中 :/HelloWorld/bin/classes/com/lucyfyr/ 下:
可以看到裡面後很多後綴為.class的文件,就是eclipse為我們自動編譯好了的java文件,其中就有:
HelloWorld.class文件。
退回到classes一級目錄:/HelloWorld/bin/classes/
執行如下命令:
javah com.lucyfyr.HelloWorld
生成文件:com_lucyfyr_HelloWorld.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lucyfyr_HelloWorld */
#ifndef _Included_com_lucyfyr_HelloWorld
#define _Included_com_lucyfyr_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_lucyfyr_HelloWorld
* Method: printJNI
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_lucyfyr_HelloWorld_printJNI
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
可以看到自動生成對應的函數:Java_com_lucyfyr_HelloWorld_printJNI
Java_ + 包名(com.lucyfyr) + 類名(HelloWorld) + 介面名(printJNI):必須要按此JNI規范來操作;
java虛擬機就可以在com.simon.HelloWorld類調用printJNI介面的時候自動找到這個C實現的Native函數調用。
當然函數名太長,可以在.c文件中通過函數名映射表來實現簡化。
第三步:
實現JNI原生函數源文件:
新建com_lucyfyr_HelloWorld.c文件: