Webview Android POST
Je suis en train d'accomplir quelque chose de très simple, mais je n'ai trouvé aucune bonne documentation sur ce sujet. J'ai une webView, et j'ai besoin de charger une page qui nécessite des données POST. Semble être un processus simple, mais je ne peux pas trouver un moyen d'afficher le résultat dans une webView.
Le processus doit être simple:
requête(avec des données POST) -> serveur -> réponse HTML -> WebView.
Je peux soumettre des données à l'aide d'un DefaultHttpClient, mais cela ne peut pas être affiché dans une WebView.
Des suggestions?
Merci Beaucoup
Solution
private static final String URL_STRING = "http://www.yoursite.com/postreceiver";
public void postData() throws IOException, ClientProtocolException {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("foo", "12345"));
nameValuePairs.add(new BasicNameValuePair("bar", "23456"));
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL_STRING);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
String data = new BasicResponseHandler().handleResponse(response);
mWebView.loadData(data, "text/html", "utf-8");
}
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Je recommanderais de faire cela dans le cadre d'une AsyncTask et la mise à jour de la WebView après
WebView
, ou êtes-vous désireux de l'utilisateur de continuer à cliquer sur les liens? Je crois que une fois que vous charger des données à partir d'unString
vous ne pouvez pas interagir avec elle. Élaborer un peu plus. 😉Content loaded through this mechanism does not have the ability to load content from the network.
-- je ne suis pas sûr si cela signifie que vous ne serez pas en mesure d'interagir avec elle une fois qu'il est chargé ou si elle ne se charge pas<img>
balises, ou quoi. Thx pour l'accepter!Deux façons de charger de la réponse post dans webview:
webview.loadData()
: À l'instar de ce que vous avez publié dans votre solution. Mais "le contenu chargé par le biais de ce mécanisme n'a pas la possibilité de charger du contenu depuis le réseau".webview.postUrl()
: Utilisez cette option si la réponse post pour charger du contenu depuis le réseau. (NOTE: uniquement accessible à partir de l'api de niveau 5, ce qui signifie pas de android 1.6 ou plus bas)(source: http://www.anddev.org/other-coding-problems-f5/webview-posturl-postdata-t14239.html)
String postData
ont pour être encodées en base64, ou ne peut-on pas utiliserString.getBytes()
pour obtenir lebyte[]
?HttpPost hp = new HttpPost();
HttpParams par = hp.getParams();
etpar.setStringParam("name","value");
mwebview.postUrl(url, par.toString().getBytes());
EncodingUtils
vient de Apache Commons, cependant Android contientandroid.utils.Base64
qui peut effectuer la même tâche:Base64.encode(params.getBytes(), Base64.DEFAULT);
URLEncoder.encode
tout en ajoutant le nom d'utilisateur et le mot de passe dans les paramètres post.- Je utiliser webView.loadData() pour ne poste client, et il affichera le contenu de l'url, mon code :
utiliser la fonction webview_ClientPost() :
Si vous utilisez une WebView dès le début cela pourrait-il fonctionner?
Une Webview avec un code html/js qui fait le POST, et, naturellement, affiche le résultat.