安卓如何调用方法
㈠ 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文件: