Проблемы HTTP-клиента Android - PullRequest
0 голосов
/ 06 марта 2012

Я надеюсь, что кто-то может найти эту проблему. У меня было приложение, которое полностью работало в области связи с сервером. К сожалению, я почему-то потерял свое рабочее пространство Eclipse при переходе на Windows 8 CP. У меня все еще был .apk, и с помощью Dex2jar и jd-gui я смог спасти много кода. Я вернул все это в рабочее состояние, но это. Я пытаюсь отправить URL на сервер и получить ответ в виде строки. Вот код:

import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

public class login extends Activity{

<code>

public void pushLogin(View paramView){

  try{
    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet(loginFinal);
    ResponseHandler<String> responseHandler = new BasicResponseHandler();
    errorTextView.setText(loginFinal);

    //code gets here
    String response = client.execute(request, responseHandler);
    //does not get here
    errorTextView.setText(response);
  }

Мой TextView всегда содержит строку loginFinal, я не могу отобразить ответ. Чтобы проверить это, я переместил errorTextView.setText(loginFinal); в строку после попытки получить ответ String. В этот момент он тоже не работал. Я рву свои волосы и уверен, что это что-то простое. У меня есть разрешение на интернет, я даже нашел свой оригинальный код для этой части приложения на этом сайте, когда я разместил его, задав отдельный вопрос. Этот код, насколько я могу судить, идентичен. Единственное, что я могу вспомнить об этом, - это то, что я перенес свою цель сборки с Froyo на Honeycomb, так как решил, что хочу сосредоточиться на планшетах.

Самое приятное, что LogCat абсолютно ничего не делает, когда я нажимаю кнопку, вызывая pushLogin. Кажется, он вообще не вызывает client.execute(request, responseHandler).

1 Ответ

0 голосов
/ 06 марта 2012

Вы, вероятно, вызываете pushLogin () в потоке пользовательского интерфейса. Обратите внимание, что политика потоков была изменена с тех пор, как API Level 11 (HONEYCOMB), который, короче говоря, не позволяет выполнять сетевые операции (включая HttpClient и HttpUrlConnection) в потоке пользовательского интерфейса.в противном случае вы получите NetworkOnMainThreadException.Правильная стратегия состоит в том, чтобы вызывать pushLogin () в фоновом потоке (хороший пример AsycnTask).

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...