2012-08-01 11 views
15

mam ładowania tej html moim zdaniem internetowejprzekazywanie danych z klasy Java Web widoku HTML

https://mail-attachment.googleusercontent.com/attachment/?ui=2&ik=25c0c425c6&view=att&th=138db54ff27ad34b&attid=0.1&disp=inline&realattid=f_h5ahtmbe0&safe=1&zw&saduie=AG9B_P9YNooGjsk_jLefLptQ9q15&sadet=1343790299575&sads=-yBVsLKP_2mh7zMfYLCF7sL1u-w

teraz to, co chcę zrobić, to wypełnić pole tekstowe w html dostarczonej z mojego java zmienna klasy, a następnie automatycznie naciśnij przycisk przesyłania.

Ale nie mam pojęcia, jak to zrobić.

Dosyć docenisz.

Odpowiedz

37

Po pierwsze, Twój adres URL wydaje się niedostępny.

Jeśli chcesz dokonać wymiany danych między aplikacją na Androida a twoją aplikacją/stroną internetową, możesz to zrobić przez javascript.

Oto przykład z oficjalnej strony Android:

Utwórz klasę tak:

public class JavaScriptInterface { 
    Context mContext; 

    /** Instantiate the interface and set the context */ 
    JavaScriptInterface(Context c) { 
     mContext = c; 
    } 

    /** Show a toast from the web page */ 
    @JavascriptInterface 
    public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
    } 
} 

W swojej WebView:

WebView webView = (WebView) findViewById(R.id.webview); 
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

Na swojej stronie internetowej:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /> 

<script type="text/javascript"> 
    function showAndroidToast(toast) { 
     Android.showToast(toast); 
    } 
</script> 

Jeśli chcesz przekazać coś na swojej stronie internetowej, po prostu wywołanie odpowiadające funkcji javascript:

String str = "xxx"; 
myWebView.loadUrl("javascript:xxx('"+str+"')"); 

Oto referencyjny: http://developer.android.com/guide/webapps/webview.html

+1

co masz na myśli przez to myWebView.loadUrl ("javascript: xxx ('xxx')"); Używam również adresu URL ładowania, aby załadować mój html, więc można używać wielokrotnie adresu URL ładowania? – User

+1

tak długo, jak istnieje funkcja javascript na twojej stronie internetowej – hungr

+1

Widzę, że dlatego będę ładował javascript ponieważ ma kod do przekazania niektórych danych. – User

14

Dodam, że obciążenie funkcji javascript należy zrobić, gdy html jest załadowana. Aby sterować tym, można wykorzystać następujące:

webview.getSettings().setJavaScriptEnabled(true); 
webview.loadUrl("file:///android_asset/test.html"); 
webview.setWebViewClient(new WebViewClient(){ 
    public void onPageFinished(WebView view, String url){ 
     webview.loadUrl("javascript:init('" + theArgumentYouWantToPass + "')"); 
    }   
}); 

test.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test</title> 
</head> 

<body> 
hola 
adios 
</body> 

<script type="text/javascript"> 

    function init(val){ 
// Do whatever you want with your parameter val 
    } 
</script> 
</html> 

zaczerpnięte z Uncaught ReferenceError: myFunction is not defined at null:1 Android exception in webview

+0

bardzo, bardzo ładne .... onPageFinished jest ważnym punktem, że zapomniałem użyć tego ... –

+0

Gdzie mogę dodać folder android_asset –

0

Wystarczy włączyć DomStorage i napisać "var x =" ciąg:

webview.getSettings().setJavaScriptEnabled(true); 
web.getSettings().setDomStorageEnabled(true); 

webview.loadUrl(urlString); 
webview.setWebViewClient(new WebViewClient(){ 

public void onPageFinished(WebView view, String url){ 
    super.onPageFinished(view, url); 
    String js = "javascript:var x =document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';"; 

    if (Build.VERSION.SDK_INT >= 19) { 
      view.evaluateJavascript(js, new ValueCallback<String>() { 
       @Override 
       public void onReceiveValue(String s) { 

       } 
      }); 
     } else { 
      view.loadUrl(js); 
     } 

    view.loadUrl(js); 
} 


}); 
Powiązane problemy