Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onKeyDown事件的作用域变量问题_Java_Android_Scope - Fatal编程技术网

Java onKeyDown事件的作用域变量问题

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;

在if语句中使用var“str”时遇到问题。我知道这是一个范围问题,但我不知道如何解决它。我失败了好几次

我的目标是在if语句中使用“str”的值来显示警报。 限制条件是我只能以这种方式分配“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”)处理后退按钮