Ich habe eine Android-App, die aus einem Webview besteht. Es muss Benutzern ermöglichen, ein Formular auf einer Webseite auszufüllen und dann die Daten des Formulars zu ändern, nachdem der Benutzer im Formular auf submit
geklickt hat. Das Formular verwendet die Anforderungsmethode POST.
Meine Frage ist also wie kann ich die POST -Daten des Formulars abfangen, die Werte ändern und sie dann mitschicken?
Zum Beispiel: Wenn es ein Webformular wie dieses gibt ...
<form action="http://www.example.com/do.php" method="post">
<input type="text" name="name" />
<input type="text" name="email" />
<input type="submit" />
</form>
Wenn der Benutzer name = Steve und email = [email protected] in das Formular eingibt, möchte ich die Werte in name = bob und email = [email protected] in der Android-App ändern und das neue POST erhalten. an http://www.example.com/do.php
gesendet werden.
Danke für Ihre Hilfe!
Wenn Sie mit JavaScript vertraut sind, würde ich vorschlagen, dass Sie JavaScript verwenden. Ich finde es bequemer und einfacher. Diese Tour zeigt Ihnen, wie Sie JavaScript in einem WebView verwenden.
wenn Sie das Formular mit der Methode postUrl () senden, können Sie die Methode postUrl in Ihrem WebView-Objekt wie folgt überschreiben.
WebView mWebView = new WebView(this){
@Override
public void postUrl(String url, byte[] postData)
{
System.out.println("postUrl can modified here:" +url);
super.postUrl(url, postData);
}};
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
linearLayout.addView(mWebView);
Ich habe eine Bibliothek mit einem speziellen WebViewClient geschrieben, die eine geänderte shouldOverrideUrlLoading
bietet, in der Sie auf die Postdaten zugreifen können.
https://github.com/KonstantinSchubert/request_data_webviewclient
Leider funktioniert meine Implementierung nur für XMLHttpRequest (AJAX) -Anfragen. Aber jemand anderes hat bereits verfasst, wie dies für Formulardaten geschehen würde: https://github.com/KeejOow/Android-post-webview
Zwischen den beiden Repositories sollten Sie Ihre Antwort finden können :)