2010-09-14 8 views
2

J'ai un problème de mon message HTTP.Ouvrir WebView avec le résultat de Http post

Le code que j'utilise fonctionne (j'ai testé pour publier des données dans un formulaire de livre d'or et cela a fonctionné).

Maintenant ce que je veux. J'ai créé deux formulaires EditText, qui contiennent des valeurs. J'ai un bouton soumettre là-bas je poste ces données (comme le test que j'ai écrit à propos de), mais maintenant je veux le poster dans une page login.php (que dans un navigateur normal me redirige vers la page member.php). Bien que je sache que les formulaires sont correctement remplis et qu'ils ont été correctement affichés sur le site «test», je veux obtenir la réponse de login.php et vérifier si l'utilisateur est connecté avec succès ou s'il a échoué, en cas de succès - > redirige-moi vers la page member.php.

Tout ce que je sais est ceci:

HttpResponse response = httpclient.execute(httppost); 

qui exécute la commande. Mais comment dois-je procéder à la vérification de connexion? Toute autre utilisation de la variable de réponse?

Répondre

2

Eh bien ... votre approche n'est pas bonne du tout. Si vous autorisez l'utilisateur à s'authentifier via votre application, pourquoi souhaitez-vous rediriger l'utilisateur vers une page member.php? pourquoi ne pas simplement mettre le formulaire de connexion dans un fichier login.php sur le serveur et faire en sorte que l'utilisateur navigue sur votre site? En tant qu'utilisateur, si une application me permet d'authentifier en utilisant EditTexts à l'intérieur de l'interface utilisateur, je m'attendrais à accéder à tout le contenu via l'application au lieu d'être redirigé vers une interface Web. Quoi qu'il en soit, si vous décidez de continuer ainsi, gardez à l'esprit que vous devrez analyser et traiter les cookies manuellement, et les injecter dans le WebView (Google à propos de la classe CookieManager). C'est ainsi que l'utilisateur sera vraiment connecté dans votre application web.

Pouvez-vous fournir un petit exemple de la façon de le mettre en place? Le flux que je vais obtenir, est-ce une réponse de serveur spécial par exemple, un login avec succès?

Ici vous avez:

public String getPostRequest(String url, String user, String pass) { 
    HttpClient postClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(url); 
    HttpResponse response; 

    try { 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("user", user)); 
     nameValuePairs.add(new BasicNameValuePair("pass", pass)); 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     response = postClient.execute(httpPost); 

     if(response.getStatusLine().getStatusCode() == 200) { 
      HttpEntity entity = response.getEntity(); 

      if (entity != null) { 
       InputStream instream = entity.getContent(); 
       String result = convertStreamToString(instream); 
       instream.close(); 
       return result; // here is a string of the result!!! 
      } 
     } 
    } catch (Exception e) {} 

    return null; // if it gets here, something wrong happens with the connection 
} 

private String convertStreamToString(InputStream is) { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    return sb.toString(); 
} 

Comment utilisez-vous? Quelque chose comme ceci:

String result = getPostRequest("http://yourpage.com/login.php", "the username", "his/her pass"); 
if(result.equals("OK")){ 
    // voila! 
} 

Je suis là en supposant que vous avez quelque chose comme ceci dans votre code PHP:

<?php 
// login logic here 

if($success){ 
    die("OK"); 
} 
?> 
+0

Il est destiné si l'utilisateur _not_ doit parcourir le site, mais je suis d'accord que le l'utilisateur s'y attendrait. – Curtain

+0

Btw, savez-vous quelque chose de comment vérifier si elle a été affichée avec succès ou connecté? – Curtain

+0

Dans ce cas, utilisez un objet 'HttpURLConnection', et avec la méthode' getInputStream() 'vous pouvez obtenir un flux de la réponse du serveur. Pour le rendre plus facile, du côté serveur, faites écho à quelque chose comme "OK" si l'utilisateur et le pass étaient corrects. – Cristian