2012-07-05 5 views
1

Hello Stackoverflowers!Connexion via HttpPost à un site Web via une application

J'ai écrit une application relativement simple qui consiste en un champ de texte de connexion, un champ de texte de mot de passe et un bouton de connexion.

Mon objectif est que lorsque l'utilisateur entre les informations de connexion et touche le bouton de connexion, l'application va connecter l'utilisateur dans le site Web que j'ai spécifié et l'ouvrir dans une intention différente ou WebView. Mon implémentation actuelle ouvre une nouvelle activité avec un WebView et transmet les informations de connexion. Mon code est le suivant pour la nouvelle activité:

setContentView(R.layout.web); 


    try { 
     //add the users login information(username/pw) to a List 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("email", "[email protected]")); 
     nameValuePairs.add(new BasicNameValuePair("password", "password1")); 

     //declare a new HttpClient 
     HttpClient httpclient = new DefaultHttpClient(); 

     //set the HttpPost to the desire URL 
     HttpPost httppost = new HttpPost(URL_STRING); 

     //set the entity to a new UrlEncodedForm with the login info and type 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8)); 

     //store the response 
     HttpResponse response = httpclient.execute(httppost); 

     //get the data from the response 
     String data = new BasicResponseHandler().handleResponse(response);    

     //get the webview from the xml 
     WebView webview = (WebView)findViewById(R.id.webView); 

     webview.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) 
      { 
       view.loadUrl(url); 
       return true; 
      } 
     }); 

     //load the return website from the server 
     webview.loadDataWithBaseURL(httppost.getURI().toString(), data, "text/html", HTTP.UTF_8, null); 

Cela me connecte avec succès à l'URL (un site https) et ouvre la page, si vous essayez de cliquer sur l'un des boutons sur le site, il vous ramène à la page de connexion dans WebView et n'affiche pas la plupart des attributs sur le site Web (graphiques/graphiques).

Est-ce que cela pourrait être une affaire de cookies?

Y a-t-il un moyen d'envoyer les informations de connexion via une nouvelle intention? Ou existe-t-il une solution à ma mise en œuvre WebView?

(ici est une question relativement similaire (ISH) qui n'a jamais obtenu une réponse définitive Android SSO (Single sign-on) for app)

Merci pour votre temps! J'apprécie vraiment que vous jetiez un coup d'oeil à ma question.

EDIT: Donc, la solution de giseks a fonctionné pour moi pour obtenir la page Web pour rester dans la WebView, mais les graphiques/graphiques/etc sur la page n'a toujours pas afficher, la solution pour c'était aussi simple que l'activation de JavaScript pour les WebSettings

webview.getSettings().setJavaScriptEnabled(true); 

Voici API WebSettings Android de Google pour référence: WebSettings

Cela m'a aidé, je l'espère, il vous aide!

Répondre

1

Je suppose que votre application ne gère pas les cookies correctement. Jetez un oeil à cette question, cela peut aider.

WebView and Cookies on Android

EDIT

Dans votre code, vous semblez passer que le code HTML récupéré de la demande à la WebView. Les cookies semblent se perdre quelque part. Je vous suggérerais une autre approche.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    WebView webv = (WebView)findViewById(R.id.MainActivity_webview);   
    webv.setWebViewClient(new WebViewClient(){ 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 
    }); 

    String postData = FIELD_NAME_LOGIN + "=" + LOGIN + 
      "&" + FIELD_NAME_PASSWD + "=" + PASSWD; 

    // this line logs you in and you stay logged in 
    // I suppose it works this way because in this case WebView handles cookies itself 
    webv.postUrl(URL, EncodingUtils.getBytes(postData, "utf-8")); 
} 
+0

Merci pour votre réponse! J'ai essayé cela mais je semble toujours avoir le même comportement, je posterai mon code modifié. – VinC

+0

L'application reste dans le WebView, mais chaque fois que vous cliquez sur quelque chose, elle renvoie à la page de connexion (du site Web qui ne fait pas partie de mon application), cela peut être un problème de cookie? – VinC

+0

@VinC Il est certainement. Jetez un oeil à la réponse mise à jour. – gisek

Questions connexes