【发布时间】:2016-08-24 13:23:20
【问题描述】:
我已使用this 指南将 JavaScript 代码绑定到正常工作的 Android 代码(Toast 消息由 javascript 代码触发,并显示 javascript 代码的 double 类型输出)。我的问题是我不能在代码的其他部分使用输出。例如,正确的输出是10, 20, 30, ...,但我在另一部分代码中访问的是0, 10, 20, 30, ...。这是我代码的相关部分:
public class myFragment extends Fragment {
int globalVar;
.
.
.
//some android code
.
.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item_show:
loadNew();
Toast.makeText(getActivity(), "globalVar " + String.valueOf(globalVar), Toast.LENGTH_SHORT).show();
//after clicking menu item, I receive a double output from javascript,
//but first output is zero!!!
.
.
.
//some android code
.
.
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void showToast(double toast) {
Toast.makeText(mContext, String.valueOf(toast), Toast.LENGTH_SHORT).show();
//In this part of code, results are correct
globalVar = (int) (toast);
}
}
每次我点击菜单项时,都会加载一个新页面,并且 javascript 代码会给出一个新结果。
<body onLoad="showAndroidToast();">
我认为问题源于从内部类访问变量,或者可能还有其他原因。 先感谢您。
【问题讨论】:
-
您好,您的
showAndroidToast()方法是什么样的?由于您在 onLoad 事件中拥有它,因此每次加载页面时都会执行它。所以也许你应该在你的文档上有一个按钮和一个 onClick 事件处理程序,比如<input type="button" value="Make a Toast" onClick="showAndroidToast('<some-value>')" /><br/> -
感谢您的回答@ishmaelMakitla。在 showAndroidToast() 中,我定义了一个双变量,然后调用 Android.showToast(myVar)。使用按钮不会进行任何更改,因为在“public void showToast(double toast)”中我收到了正确的结果。
-
我明白了,您说您不能在代码的其他部分使用输出(双值) - 这个“代码的另一部分”在哪里,似乎有不正确的数字
0, 10, 20, 30, ...?我怀疑这是在 Menu-Item-Click 功能中,但只是为了确认,所以我可以提出一些建议...... -
@ishmaelMakitla:首先单击菜单项会导致新页面加载并触发 JS 代码,第一个输出应该是 10,我收到 10 作为 'public void showToast(double toast)' 中的第一个输出.但在“WebAppInterface”类之外的任何地方,“globalVar”为零。通过第二次单击菜单项,输出为 20,但现在 globalVar,在 'WebAppInterface' 类之外为 10。我希望现在问题会更清楚。
-
好的,这是有道理的——问题是在菜单项单击期间,
globalVar尚未设置(0是您未初始化的int的默认值)——仅当 JS 脚本执行showAndroidToast函数时 - 接收到toast的值(正确),然后分配给变量globalVar- 因此由于这个顺序,globalVar 将始终具有先前的值(如0、10等) - 所以这是预期的行为。我将发布我建议的解决方案作为答案(评论空间有限)。
标签: javascript java android global-variables inner-classes