2010-11-17 8 views
0

J'ai écrit ce code pour me connecter à mon site Web et vérifier si je suis connecté ou non.Connexion de la version Android Connexion SingleClientConnManager

public class smerdLearning extends Activity { 
/** Called when the activity is first created. */ 
final HttpParams params = new BasicHttpParams(); 
final HttpClient client = new DefaultHttpClient(params); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    String url, user, pwd, user_field, pwd_field; 

    url = "http://SMERDER.org/login/"; 


    user_field = "username"; 
    pwd_field = "password"; 
    user = "robert"; 
    pwd = "fanello"; 

    final List<NameValuePair> myList = new ArrayList<NameValuePair>(2); 
    myList.add(new BasicNameValuePair(user_field, user)); 
    myList.add(new BasicNameValuePair(pwd_field, pwd)); 


    final HttpPost post = new HttpPost(url); 

    Button login_button = (Button)findViewById(R.id.login_button); 

    login_button.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
      try { 
       post.setEntity(new UrlEncodedFormEntity(myList)); 
      } catch (UnsupportedEncodingException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      try { 
       HttpResponse response = client.execute(post); 
       System.out.println("Am I logged in?"); 
       String am_i_logged= "http://smerder.smerder.org/api/am-i-logged-in/"; 

       try { 
        URLreader(am_i_logged, response); 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

void URLreader(String url, HttpResponse response) throws Exception{ 
    response = client.execute(new HttpGet(url)); 
    HttpEntity entity = response.getEntity(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(entity.getContent())); 

    String inputLine; 

    while ((inputLine = in.readLine()) != null){ 
     System.out.println(inputLine); 
    } 
    in.close(); 
} 

}

Mais, si je vois le journal avec LogCat, je vois 2 Avertissement: 11 au 17 mars: 07: 40,976: WARN/SingleClientConnManager (1195): Assurez-vous de libérer la connexion avant d'en allouer un autre.

Comment libérer la connexion?

Répondre

0

Votre code exécute 2 opérations http.

avant l'appel de URLreader, vous avez un

HttpResponse response = client.execute(post); 

alors un appel à URLreader

void URLreader(String url, HttpResponse response) throws Exception{ 
    response = client.execute(new HttpGet(url)); 
    HttpEntity entity = response.getEntity(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(entity.getContent())); 

    String inputLine; 

    while ((inputLine = in.readLine()) != null){ 
     System.out.println(inputLine); 
    } 
    in.close(); 
} 

Vous êtes jeter le passé en réponse, et non sur APPELLE près c'est courant. Quelque part (pré ou post URLreader), vous devez

InputStream is = post.getEntity().getContent() 
if(is!=null) 
    is.close() 

Vous pouvez également jeter un appel à

post.getEntity().consumeContent() ; 

Je ne l'ai pas, mais vu dans le code exemple.