2012-05-19 2 views
0

J'ai le code suivant qui affiche les informations de connexion sur un site Web. il fonctionne, mais comment puis-je avoir le cookie de session si je ne dois vous connecter à nouveau pour les autres pagesComment enregistrer le cookie pour les connexions suivantes avec HttpClient

modifier: code mis à jour

importations ...

public class Login extends Activity { 
    Button bLogin; 
    EditText teUsername, tePassword; 
    CheckBox chbRememberPass; 

    HttpClient httpclient; 
    HttpResponse response; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 
     initialiseVars(); 
     httpclient = new DefaultHttpClient(); 

     bLogin.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       checkLoginDetails(); 
       test0(); 
      } 
     }); 
    } 

    private void initialiseVars() { 
     bLogin = (Button) findViewById(R.id.bLogin); 
     teUsername = (EditText) findViewById(R.id.etUsername); 
     tePassword = (EditText) findViewById(R.id.etPassword); 
     chbRememberPass = (CheckBox) findViewById(R.id.chkRememberPass); 
    } 

    private void checkLoginDetails() { 


     HttpPost httppost = new HttpPost(
       "mywebsite/login.php"); 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5); 
     nameValuePairs.add(new BasicNameValuePair("username", "admin")); 
     nameValuePairs.add(new BasicNameValuePair("password", "pass")); 

     try { 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      Log.d("myapp", "works till here. 2"); 
      try { 
       ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
       String responseBody = httpclient.execute(httppost, responseHandler); 

        Log.d("firstCon",responseBody); 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 

    } 

    private void test0() { 

     HttpGet httppost = new HttpGet(
       "https://mywebsite/userSettings.php"); 

     try { 
      response = httpclient.execute(httppost); 
      //String responseBody = EntityUtils.toString(response.getEntity());   
      try { 
       Log.d("secondCon", test()); 

      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       Log.d("seconderror", e.toString()); 
      } 


     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    } 

} 

Répondre

2

Au lieu de créer une nouvelle DefaultHttpClient, réutilisez-le. Vos cookies sont stockés dans DefaultHttpCilent, donc si vous continuez à réutiliser la même instance, vos cookies seront automatiquement traités pour vous.

+0

J'ai déclaré httpclient globalement dans la classe mais maintenant quand j'essaie de l'utiliser une seconde fois, il dit qu'il est utilisé par la première méthode. quand je fais httpclient.getConnectionManager(). shutdown() alors la seconde méthode se déclenche et l'erreur indique que le gestionnaire est fermé. comment puis-je le réaliser après un appel et le donner à une autre méthode? – code511788465541441

+1

@ user521180: Etape # 1: Créez le 'DefaultHttpClient' dans' onCreate() 'de votre activité. Étape # 2: Appelez 'getConnectionManager(). Shutdown()' dans 'onDestroy()' de votre activité. Étape n ° 3: Si vous envisagez d'utiliser ceci dans plusieurs threads simultanément, attachez un 'ThreadSafeClientConnectionManager' comme documenté sur http://hc.apache.org. Étape # 4: Utilisez le 'DefaultHttpClient' selon les besoins. – CommonsWare

+0

J'ai mis à jour la question originale avec le code de toute la classe. pourriez-vous me montrer comment faire pour que 'test0()' puisse récupérer aussi des données – code511788465541441

Questions connexes