2011-07-11 30 views
0

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

我的目标是利用“海峡”的值在if语句中显示警报与否。 限制是我必须以这种方式分配“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 

更新:

OK我是尽量不与阅读整个代码打扰你,但它的短,可能有帮助。

在网页视图显示我的html页面,我也读了隐藏变量将决定是否一个警告框应该显示与否。我只是想在keydown推送中的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:

行,所以我改变了我的代码位。但是,现在我收到警报错误的任何想法? “该方法的setIcon(INT)是未定义的类型buttonOne.MyJavaScriptInterface”我得到.setIcon(android.R.drawable.ic_dialog_alert)这个错误并返回super.onKeyDown(的keyCode,事件);

public class MyJavaScriptInterface 
{ 
    public String showHTML(String html) 
    { 
    String str = html; 
    return str; 
    } 
    public boolean onKeyDown(int keyCode, KeyEvent event, String str) 
    { 

     //Handle the back button 
     if(keyCode == KeyEvent.KEYCODE_BACK && str == "0") 
     { 
      //Ask the user if they want to quit 
      AlertDialog.Builder alertbox = new  AlertDialog.Builder(buttonOne.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); 
     } 

    } 
} 
+0

随着答案@Steve,我会说使用String的**等于**方法,而不是** == **。 –

+0

onKeyDown事件处理函数是什么类? –

回答

2

不确定你的目标是什么,但你不能让字符串变成一个成员变量吗?

public class MyJavaScriptInterface 
{ 
private String str; 
public String showHTML(String html) 
{ 
    str = html; 
    return str; 
    } 
} 
+0

我的目标是在读取if(keyCode == KeyEvent.KEYCODE_BACK && str ==“0”)的方法中使用我的方法public String showHTML(String html)中的“str”。看到str ==“0”?那就是我需要的 – Rick

+0

史蒂夫提供的代码将完成这一工作。 –

+0

好,所以我改了一下我的代码。但是,现在我收到警报错误的任何想法?代码不会适合在这里把它放在一个答案 – Rick

1

这将有助于了解侦听器方法在哪个类中;你有它在MyJavaScriptInterface类之外,但没有任何关于它的上下文。所以当onKeyDown发生时,你是否有html来运行showHTML(html)方法?它已经运行?你有一个MyJavaScriptInterface的实例来运行它吗?

如果你有一个额外}在那里,它确实是同一类的一部分,那么我会@同意史蒂夫的答案。

如果它是类外,再就是根据你的实际情况,许多解决方案。最简单的方法是使海峡的实例变量作为@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 
+0

谢谢你工作!******* \t公共类MyJavaScriptInterface \t { \t \t公共无效showHTML(字符串HTML) \t { \t \t STR = HTML; \t \t \t } \t \t公共字符串getStr() \t \t { \t \t \t返回STR; \t \t} \t} \t公共布尔的onkeydown(INT的keyCode,KeyEvent的事件) \t { \t \t MyJavaScriptInterface mjsi =新MyJavaScriptInterface(); \t \t //处理后退按钮 \t \t if(keyCode == KeyEvent.KEYCODE_BACK && mjsi.getStr()。equals(“1”)) – Rick