2011-05-07 82 views
4

我试图在JavaScript中调用java中的方法,但是当我在模拟器中运行应用程序时,不会发生这种情况,应用程序会在它调用java中的方法时停止。
这里是Java代码:将JavaScript代码绑定到Android代码

import android.os.Bundle; 
import android.webkit.WebView; 
import com.phonegap.*; 

public class App extends DroidGap { 
    WebView webView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     webView = new WebView(this); 
     webView.addJavascriptInterface(new message(), "Show"); 
     super.loadUrl("file:///android_asset/www/index.html"); 
    } 

    class message { 
     String msg() { 
      return "Hello World!!"; 
     } 
    } 
} 


这里是JavaScript:

<script type="text/javascript"> 
{ 
    alert("Start"); 
    alert(Show.msg()); 
    alert("End");  
} 
</script> 

它显示了一个警报,但没有后,任何人都可以帮忙吗?

回答

4

你的问题是,你有一半使用PhoneGap和一半没有。您正在从PhoneGap创建一个单独的WebView类。您添加“显示”的WebView类永远不会被使用。相反,WebView类是superDroidGap)的成员。

你应该做两件事之一。

  • 使用的PhoneGap的插件结构(见例子here
  • 都不要使用PhoneGap的,并有一个类,看起来更像如下:

    public class act extends Activity { 
        WebView webView; 
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         webView = new WebView(this); 
         webView.getSettings().setJavaScriptEnabled(true); 
    
         // Set JS alert() hook 
         webView.setWebChromeClient(new WebChromeClient() { 
          public boolean onJsAlert(WebView view, String url, String message, JsResult result) 
          { 
           return false; 
          } 
          });  
    
         webView.loadUrl("file:///android_asset/www/index.html"); 
    
         // Add JS libraries 
         webView.addJavascriptInterface(new message(), "Show"); 
        } 
    
        class message { 
         public String msg() { 
          return "Hello World!!"; 
         } 
        } 
    } 
    

注意,方法msg需要是public

+0

谢谢,我明白你的意思了......所以我认为用tcp \ ip客户端替换消息类并让它与桌面计算机上的服务器进行通信是有道理的?我打算为此使用wifi,并且我已经使用android设备上的telnet应用程序测试了连接,通信完美无缺。 – 2011-05-08 19:48:48

+0

我相信如此。你应该能够在消息类中放入你想要的任何Android本地代码。 – 2011-05-08 19:52:45

+0

@PaulBeusterien在'JsResult'面临错误为什么这个 – NagarjunaReddy 2013-04-19 07:26:18

0

为什么不直接使用AlertDialog?

private void showDialog(int title, String message) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle(title); 
    builder.setMessage(message); 
    builder.setPositiveButton(R.string.ok_button, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
     } 
    }); 
    builder.show(); 
} 
+0

我只使用示例中的alert(String)方法来检查java和javascript之间的交互是否正常,在我正在编写的应用程序中,我想要调用不同的方法,每个方法执行不同的操作并返回不同的类型。 – 2011-05-08 03:45:19