Подключение к выпуску Android Вход в систему SingleClientConnManager - PullRequest
0 голосов
/ 17 ноября 2010

Я написал этот код для входа на мой веб-сайт и проверки, вошел ли я в систему.

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();
}

}

Но, если я вижу журнал с LogCat, я вижу2 предупреждение: 11-17 03: 07: 40.976: WARN / SingleClientConnManager (1195): Обязательно освободите соединение, прежде чем выделять другое.

Как я могу освободить соединение?

1 Ответ

0 голосов
/ 16 марта 2011

Ваш код выполняет 2 операции http.

до вызова URLreader у вас есть

HttpResponse response = client.execute(post);

затем вызов 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();
}

Вы отбрасываете пропущенный ответ, и никто не вызывает близкий поток. Где-то (до или после URLreader), вам нужно

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

Возможно, вы также захотите позвонить на

post.getEntity().consumeContent() ;

У меня этого нет, но я видел это в примере кода.

...