我有一个显示本地HTML文件的WebView。在HTML中,我有一个硬编码的JavaScript函数。Onclick从一个按钮开始,也在该HTML文件中,函数将字符串传递到JavaScriptInterface。从那里,我想用这两个传递的字符串在我的活动中调用一个方法。这可能吗?
我已经设置好了所有的东西,它正在工作,但是在活动中调用一个方法(从JSInterface中调用)只有在我将活动方法设置为static时才有效,当它设置为static时,我不能从static方法(从JSInterface触发)中调用活动中的其他方法。
这是我的代码,我希望你能帮助我:
public class JSWebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
JSWebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void sendData(String action, String filename){
MbaiTextActivity.getDecision(action, filename);
}
}
public class MbaiTextActivity extends Activity {
private static final String TAG = "_TEXTACTIVITY";
MbaiWebView mwv;
RelativeLayout containerForWebViews;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.text_activity);
containerForWebViews = (RelativeLayout) findViewById(R.id.webView_container);
mwv = new MbaiWebView(this);
mwv.setWebViewClient(new MbaiWebViewClient(this));
mwv.setOnStatusListener(onWebViewListener);
mwv.addJavascriptInterface(new JSWebAppInterface(this), "android");
mwv.findViewById(R.id.webView_container);
mwv.loadHTML(textsPath + storyparts.get(currentPosition).getFilename());
containerForWebViews.addView(mwv);
private MbaiWebView.OnStatusListener onWebViewListener = new MbaiWebView.OnStatusListener()
static void getDecision(String action, String filename){
// just for test purpose
System.out.println("Aus der TextAct.: " + filename + " " + action);
// do soemthing
}
}
从JSInterface类i调用的test()在活动中:
public void test(String one, String two){
System.out.println("Aus der Test: " + one + " " + two);
mwv.loadHTML(textsPath + "derBrax_part5.html");
}
04-18 08:01:23.248 17751-17891/com.example.max.mybai I/System.out: Aus der Test: Springen derBrax_part1.html
04-18 08:01:23.249 17751-17891/com。实例max.mybai W/WebView:java。Throwable:在线程“JavaBridge”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期的活套活套(main,tid1){76eeef3}在活套(JavaBridge,tid335){6f228eb}上调用,FYI主活套是android上的活套(main,tid1){76eeef3})。网络工具包。网络视图。android上的checkThread(WebView.java:2334)。网络工具包。网络视图。com上的loadUrl(WebView.java:927)。实例马克斯·米拜。姆拜维尤。在com上加载html(MbaiWebView.java:94)。实例马克斯·米拜。MbaiTextActivity$override。在com上测试(MbaiTextActivity.java:180)。实例马克斯·米拜。MbaiTextActivity$override。访问com上的$dispatch(MbaiTextActivity.java)。实例马克斯·米拜。MbaiTextActivity。在com上测试(MbaiTextActivity.java:0)。实例马克斯·米拜。JSWebAppInterface。org上的sendData(JSWebAppInterface.java:24)。铬。基础SystemMessageHandler。组织上的NativeDorUnloponce(本机方法)。铬。基础SystemMessageHandler。android上的handleMessage(SystemMessageHandler.java:39)。操作系统。处理程序。android上的dispatchMessage(Handler.java:102)。操作系统。活套。android上的loop(Looper.java:154)。操作系统。手杖线。run(HandlerThread.java:61)04-18 08:01:23.249 17751-17891/com。实例最大mybai W/系统。错误:java。RuntimeException:java。Throwable:在线程“JavaBridge”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期活套活套(主,tid 1){76eeef3}调用活套(JavaBridge,tid 335){6f228eb},FYI主活套为活套(主,tid 1){76eeef3})04-18 08:01:23.249 17751-17891/com。实例最大mybai W/系统。呃:在android上。网络工具包。网络视图。checkThread(WebView.java:2344)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。呃:在android上。网络工具包。网络视图。loadUrl(WebView.java:927)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。错误:在com上。实例马克斯·米拜。姆拜维尤。loadHTML(MbaiWebView.java:94)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。错误:在com上。实例马克斯·米拜。MbaiTextActivity$override。test(MbaiTextActivity.java:180)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。错误:在com上。实例马克斯·米拜。MbaiTextActivity$override。访问$dispatch(MbaiTextActivity.java)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。错误:在com上。实例马克斯·米拜。MbaiTextActivity。测试(MbaiTextActivity.java:0)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。错误:在com上。实例马克斯·米拜。JSWebAppInterface。sendData(JSWebAppInterface.java:24)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。错误:在org。铬。基础SystemMessageHandler。NativedorUnloponce(本地方法)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。错误:在org。铬。基础SystemMessageHandler。handleMessage(SystemMessageHandler.java:39)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。呃:在android上。操作系统。处理程序。dispatchMessage(Handler.java:102)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。呃:在android上。操作系统。活套。loop(Looper.java:154)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。呃:在android上。操作系统。手杖线。run(HandlerThread.java:61)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。错误:由:java引起。Throwable:在线程“JavaBridge”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期活套活套(主,tid 1){76eeef3}调用活套(JavaBridge,tid 335){6f228eb},FYI主活套为活套(主,tid 1){76eeef3})04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。呃:在android上。网络工具包。网络视图。checkThread(WebView.java:2334)04-18 08:01:23.250 17751-17891/com。实例最大mybai W/系统。呃:。。。11更多04-18 08:01:23.255 17751-17751/com。实例max.mybai I/chromium:[INFO:CONSOLE(19)]“未捕获错误:在方法调用期间引发了Java异常”,来源:file:///android_asset/books/der_brax/texts/derBrax_part1.html(19)04-18 08:01:23.29117751-17751/com。实例max.mybai W/art:尝试删除非JNI本地引用,转储线程04-18 08:01:23.432 17751-17751/com。实例max.mybai W/art:尝试删除非JNI本地引用,转储线程
像这样重写代码:
public void getDecision(String action, String filename){
// just for test purpose
System.out.println("Aus der TextAct.: " + filename + " " + action);
// do soemthing
}
public class JSWebAppInterface {
private final MbaiTextActivity act;
/** Instantiate the interface and set the context */
public JSWebAppInterface(MbaiTextActivity act) {
this.act = act;
}
@JavascriptInterface
public void sendData(String action, String filename){
//EDIT:
act.runOnUiThread(new Runnable() {
@Override
public void run () {
act.getDecision(action, filename);
}
});
}
}
//in onCreate
mwv.addJavascriptInterface(new JSWebAppInterface(this), "android");
> 按常规声明代码 Page language=“vb”autoeventwireup=“false”masterpageFile=“~/site.master”codeBehind=“RetailCompetition.aspx.vb”inherits=“company.applications.production.ui.RetailCompetition” 事件
问题内容: 我对javascript不太熟悉,但是我认为这是实现我的目标的最佳方法。如果没有,请纠正我。 我最后有一个许可证文本2按钮。所有这些都是用HTML编写的,因为许可证中有一些链接。现在,我希望当用户单击中的“确定”按钮时,这会触发一些我可以在Java中抓取的JavaScript或侦听器以触发应用程序中的前进。(“取消”按钮的作用相反,但是如果我知道一种方法,我可以做另一种。) 这会给某人
这是我的问题: 我想在一个活动中实现两个按钮。一个是计算BMI,另一个是检查时间。我希望用户能在同一个活动中看到两个按钮,这也取决于他们想做什么。(这些功能不是同时工作的,而是分开的。另外,我在这两个活动中都实现了返回主页的按钮。) 在Android模拟器中,消息来自“应用程序继续停止”。 以下是主要活动。java文件: 谢谢! 这些消息是我按下导致应用程序停止的按钮后的stacktrace:
我已经创建了一个类,它扩展了。在该类中,当我按下一个按钮时,我想更改一个按钮的背景,该按钮被放置在主活动中。 我试图创建一个内部类来访问Main Active对象,但我得到的是这个错误: 尝试在空对象引用上调用虚拟方法android.content.pm.Application ationInfoandroid.content.Context.getApplication ationInfo()
我用Webview创建了一个应用程序,需要自动按下按钮 返回null。 任何帮助都将不胜感激!
我正在为Android在Eclipse中编写一个应用程序。该应用程序不断与Web服务器中的内容进行通信。在服务器中,我有一个带有另一个按钮的html文件。我希望当我按下Android应用程序中的按钮时,html文件中的按钮被自动单击...是否可能。请建议... 我看到下面的代码(jquery): 谢啦