2011-05-07 4 views
4

자바에서 자바에서 메소드를 호출하려고하는데, 에뮬레이터에서 애플리케이션을 실행할 때 이런 일이 발생하지 않습니다. 자바에서 메소드를 호출 할 때 애플리케이션이 멈 춥니 다.안드로이드 코드에 자바 스크립트 코드 바인딩하기

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

그것은 사람이 도움이 될 수 있습니다, 그 후 첫 번째 경고하지만 아무것도를 보여줍니다
여기에 자바 코드 : 자바 스크립트는 여기

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!!"; 
     } 
    } 
} 


입니까?

답변

4

문제는 당신이 PhoneGap을 절반 사용하고 절반을 사용하지 않는다는 것입니다. PhoneGap에서 별도의 WebView 클래스를 만듭니다. "Show"를 추가 한 WebView 클래스는 결코 사용되지 않습니다. 대신 super (DroidGap)의 멤버 인 WebView 클래스가 있습니다.

두 가지 중 하나를 수행해야합니다.

  • 사용 폰갭의 플러그인 구조 (here 예 참조)
  • 전혀 폰갭을 사용하여보다 다음과 같은 클래스가 안 함 : 그

    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!!"; 
         } 
        } 
    } 
    

주 방법 msgpublic

+0

고마워, 나는 네가 무슨 뜻인지 안다. 그럼 내가 메시지 클래스를 tcp \ ip 클라이언트로 바꾸고 데스크탑 컴퓨터의 서버와 통신하도록하는 것이 합리적일까요? 나는 이것을 위해 wifi를 사용할 생각이고 나는 안드로이드 장치에 telnet 응용 프로그램을 사용하여 이미 연결을 테스트했습니다. 통신은 완벽하게 작동합니다. –

+0

나는 그렇게 믿는다. 원하는 안드로이드 네이티브 코드를 메시지 클래스에 넣을 수 있어야합니다. –

+0

@PaulBeusterien이 'JsResult'에 직면 한 이유는 무엇입니까? – NagarjunaReddy

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) 메소드 만 사용하십시오. 필자가 작성한 응용 프로그램에서는 각기 다른 동작을 수행하고 다른 유형을 반환하는 다른 메소드를 호출하려고합니다. –