Java onKeyDown事件的作用域变量问题
在if语句中使用var“str”时遇到问题。我知道这是一个范围问题,但我不知道如何解决它。我失败了好几次 我的目标是在if语句中使用“str”的值来显示警报。 限制条件是我只能以这种方式分配“str”的值Java onKeyDown事件的作用域变量问题,java,android,scope,Java,Android,Scope,在if语句中使用var“str”时遇到问题。我知道这是一个范围问题,但我不知道如何解决它。我失败了好几次 我的目标是在if语句中使用“str”的值来显示警报。 限制条件是我只能以这种方式分配“str”的值 public class MyJavaScriptInterface { public String showHTML(String html) { String str = html; return str;
public class MyJavaScriptInterface
{
public String showHTML(String html)
{
String str = html;
return str;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
//Handle the back button
if(keyCode == KeyEvent.KEYCODE_BACK && str =="0")
{
//Ask the user if they want to quit
更新:
好的,我试着不打扰你阅读整个代码,但它很短,可能会有帮助
在webview中,我显示html页面,并读取一个隐藏变量,该变量将决定是否显示警报框。我只是想在keydown push中得到if语句的值。这是全部代码
package com.ishop.pizzaoven;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class buttonOne extends Activity
{
WebView wb = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.buttons);
wb = new WebView(this);
wb.getSettings().setJavaScriptEnabled(true);
wb.setWebViewClient(new HelloWebViewClient());
wb.getSettings().setJavaScriptEnabled(true);
wb.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
/* WebViewClient must be set BEFORE calling loadUrl! */
wb.setWebViewClient(new WebViewClient()
{
@Override
public void onPageFinished(WebView view, String url)
{
/* This call inject JavaScript into the page which just finished loading. */
wb.loadUrl("javascript:window.HTMLOUT.showHTML(document.getElementById('sendtextcoupon').value);");
}
});
wb.loadUrl("http://ishopstark.com/mobileapp.php?category=1");
setContentView(wb);
}
private class HelloWebViewClient extends WebViewClient
{
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
}
final Context myApp = this;
public class MyJavaScriptInterface
{
public void showHTML(String html)
{
String str = html;
}
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
//Handle the back button
if(keyCode == KeyEvent.KEYCODE_BACK)
{
//Ask the user if they want to quit
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Coupon")
.setMessage("Do you want a coupon texted to you?")
.setPositiveButton("YES!", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
//Stop the activity
Toast.makeText(buttonOne.this, "Great! You'll get one in just a couple of minutes.", Toast.LENGTH_LONG).show();
finish();
}
})
.setNegativeButton("Not now", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
//Stop the activity
finish();
}
})
.show();
return true;
}
else
{
return super.onKeyDown(keyCode, event);
}
}
}// End of main class
更新2:
好的,我对代码做了一些修改。但现在我有了新的想法?“类型buttonOne.MyJavaScriptInterface的方法setIcon(int)未定义”我在.setIcon(android.R.drawable.ic_对话框_警报)上得到此错误,并返回super.onKeyDown(keyCode,event)
不确定您的目标是什么,但是您不能将字符串作为成员变量吗
public class MyJavaScriptInterface
{
private String str;
public String showHTML(String html)
{
str = html;
return str;
}
}
不确定您的目标是什么,但是您不能将字符串作为成员变量吗
public class MyJavaScriptInterface
{
private String str;
public String showHTML(String html)
{
str = html;
return str;
}
}
了解侦听器方法所在的类会很有帮助;它位于MyJavaScriptInterface类之外,但周围没有任何上下文。所以,当onKeyDown发生时,您是否有html来运行showHTML(html)方法?它已经运行了吗?您是否有MyJavaScriptInterface的实例来运行它 如果你有一个额外的},而且它确实是同一个类的一部分,那么我同意@Steve的答案 如果是课外活动,那么根据你的实际情况有很多解决方案。最简单的方法是将str设为@Steve所说的实例变量,然后添加一个访问器方法:
public String getStr(){
return str;
}
然后让您的侦听器调用该访问器,而不是尝试直接使用str:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// Get an instance of MyJavaScriptInterface;
MyJavaScriptInterface mjsi = new MyJavaScriptInterface();
//Handle the back button
if( keyCode == KeyEvent.KEYCODE_BACK && mjsi.getStr().equals("0") )
{
//Ask the user if they want to quit
了解侦听器方法所在的类会很有帮助;它位于MyJavaScriptInterface类之外,但周围没有任何上下文。所以,当onKeyDown发生时,您是否有html来运行showHTML(html)方法?它已经运行了吗?您是否有MyJavaScriptInterface的实例来运行它 如果你有一个额外的},而且它确实是同一个类的一部分,那么我同意@Steve的答案 如果是课外活动,那么根据你的实际情况有很多解决方案。最简单的方法是将str设为@Steve所说的实例变量,然后添加一个访问器方法:
public String getStr(){
return str;
}
然后让您的侦听器调用该访问器,而不是尝试直接使用str:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// Get an instance of MyJavaScriptInterface;
MyJavaScriptInterface mjsi = new MyJavaScriptInterface();
//Handle the back button
if( keyCode == KeyEvent.KEYCODE_BACK && mjsi.getStr().equals("0") )
{
//Ask the user if they want to quit
与answer@Steve一起,我会说使用String的equals方法代替==。onKeyDown事件处理程序位于哪个类?与answer@Steve一起,我会说使用String的equals方法代替==。onKeyDown事件处理程序位于哪个类?我的目标是在我的方法publicstringshowhtml(stringhtml)中使用“str”在读取if(keyCode==KeyEvent.keyCode\u BACK&&str==0)的函数中。看到str==“0”了吗?这就是我需要的,所以我稍微修改了一下代码。但现在我有了新的想法?这里的代码不适合放在回答中我的目标是在方法publicstringshowhtml(stringhtml)中使用“str”来读取if(keyCode==KeyEvent.keyCode\u BACK&&str==0)。看到str==“0”了吗?这就是我需要的,所以我稍微修改了一下代码。但现在我有了新的想法?代码不适合放在回答中谢谢这成功了!******公共类MyJavaScriptInterface{public void showHTML(String html){str=html;}公共字符串getStr(){return str;}}公共布尔onKeyDown(int-keyCode,KeyEvent事件){MyJavaScriptInterface mjsi=new MyJavaScriptInterface();//如果(keyCode==KeyEvent.keyCode_BACK&&mjsi.getStr().equals(“1”))感谢您的帮助!*******公共类MyJavaScriptInterface{public void showHTML(String html){str=html;}公共字符串getStr(){return str;}公共布尔onKeyDown(int-keyCode,KeyEvent-event-event){MyJavaScriptInterface mjsi=new MyJavaScriptInterface();//如果(keyCode==KeyEvent.keyCode\u back&&mjsi.getStr().equals(“1”)处理后退按钮