2012-03-06 2 views
0

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

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

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

Лучшая часть заключается в том, что LogCat ничего не делает, когда я нажимаю кнопку, запуская pushLogin. Кажется, он не запускает client.execute(request, responseHandler).

+0

Почему бы не проверить client.execute, чтобы узнать, выбрасывает ли оно исключение. Вы уверены, что сервер работает, с которым вы пытаетесь связаться? – dbryson

+0

Что находится в блоке catch после попытки {}? Если вы говорите, что не выполняет строку после client.execute, я должен предположить, что она удаляет исключение. Вы перешли в отладчик? – Tim

+0

У меня был метод catch. Я до сих пор невероятно новичок в этом, но у меня создается впечатление, что это должно подтолкнуть к какой-то ошибке. 'catch (Exception e) { Toast.makeText (это, e.getMessage(), Toast.LENGTH_LONG);' У меня никогда не было тоста с ошибкой. Что-то не так? –

ответ

0

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

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

+0

Вот и все, спасибо. Я планирую перевести его на асинхронную задачу. Фактически, это то, над чем я работал, когда потерял свой код. Тем не менее, я хотел вернуться туда, где я остановился, прежде чем пробовал что-нибудь новое. Из любопытства эта политика основана на цели построения? Причина, по которой я прошу, заключается в том, что я запускал (в основном) тот же код, с http-связью в потоке пользовательского интерфейса на том же телефоне ICS, и он работал нормально, когда цель была 8, а не 11. Снова, спасибо за помощь! –

+0

Именно поэтому он находится внутри теста условия if, StrictMode.ThreadPolicy вводится с тех пор, как условие уровня API 9 будет проверяться во время выполнения. код, который я опубликовал, работает на всех версиях Android. – yorkw