2011-07-11 10 views
0

ifステートメントでvar "str"を使用する際に問題があります。私はそれが範囲の問題であることを知っていますが、私はそれを修正する方法がわかりません。私は何度か失敗した。スコープonKeyDownイベントの変数の問題

私の目標は、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 

更新:

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:

OKだから、私は、コードを少し変更しました。しかし、今私はどのようなアイデアを警告エラーが発生? "メソッドsetIcon(int)は、buttonOne.MyJavaScriptInterface型では未定義です。"このエラーは.setIcon(android.R.drawable.ic_dialog_alert)で取得され、super.onKeyDown(keyCode、event)が返されます。

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 = ** equals **メソッドを使用するといいでしょう。 –

+0

onKeyDownイベントハンドラはどのクラスに属していますか? –

答えて

2

あなたの目的は正確にはわかりませんが、文字列をメンバー変数にすることはできませんか?

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

私の目的は、(keyCode == KeyEvent.KEYCODE_BACK && str == "0")ifを読み込むメソッドのpublic String showHTML(String html)で、 "str"を使用することです。 str == "0"を参照してください?それは私が必要とするものです – Rick

+0

スティーブが提供したコードはまさにこれを行うでしょう。 –

+0

ok私は少し私のコードを変更しました。しかし、今私はどのようなアイデアを警告エラーが発生?コードはここで答えに入れないでください – Rick

1

リスナーメソッドがどのクラスを知るために役立つだろう。 MyJavaScriptInterfaceクラスの外にありますが、その周りにコンテキストはありません。 onKeyDownが発生したときに、showHTML(html)メソッドを実行するには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 
を@Steveが言ったようにインスタンス変数STR行い、その後、アクセサメソッドを追加することです最も簡単な方法
+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キーコード、イベントのKeyEvent) \t {\t \t MyJavaScriptInterface mjsi =新しいMyJavaScriptInterface()。 \t \t //戻るボタンを処理する \t \t if(keyCode == KeyEvent.KEYCODE_BACK && mjsi.getStr()。equals( "1")) – Rick