асинхронный hhtp запрос

Ответить
ilgiz_vafin
Сообщения: 19
Зарегистрирован: 05 апр 2012, 11:52

асинхронный hhtp запрос

Сообщение ilgiz_vafin » 05 апр 2012, 12:01

Всем привет.
Подскажите пожалуйста как реализовать асинхронный вызов

Код: Выделить всё

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(uri);

HttpResponse response = httpclient.execute(request);

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: асинхронный hhtp запрос

Сообщение damager82 » 05 апр 2012, 12:51

Можно так.
onclick - обработчик нажатия кнопки, которая запускает процесс

Код: Выделить всё

public class MainActivity extends Activity {

	TextView tv;
	Handler h = new Handler();

	/** Called when the activity is first created. */
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		tv = (TextView) findViewById(R.id.tv);
	}

	public void onclick(View v) {
		// запускаем новый поток, для асинхронного выполнения задачи runnabl
		new Thread(runnabl).start();
	}

	// задача runnabl
	Runnable runnabl = new Runnable() {
		public void run() {
			DefaultHttpClient httpclient = new DefaultHttpClient();
			HttpGet request = new HttpGet();
			try {

				URI uri = new URI("http://www.ya.ru");
				request.setURI(uri);

				// меняем TextView через Handler, т.к. напрямую нет доступа
				h.post(new Runnable() {
					public void run() {
						tv.setText("Start!");
					}
				});

				HttpResponse response = httpclient.execute(request);

				// меняем TextView через Handler
				h.post(new Runnable() {
					public void run() {
						tv.setText("Done!");
					}
				});

			} catch (URISyntaxException e) {
			} catch (ClientProtocolException e) {
			} catch (IOException e) {
			}
		}
	};
}
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

ilgiz_vafin
Сообщения: 19
Зарегистрирован: 05 апр 2012, 11:52

Re: асинхронный hhtp запрос

Сообщение ilgiz_vafin » 05 апр 2012, 14:16

А нет возможности сделать callback метод по аналогии с c#?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: асинхронный hhtp запрос

Сообщение damager82 » 05 апр 2012, 15:26

ilgiz_vafin писал(а):А нет возможности сделать callback метод по аналогии с c#?
Вот тут не подскажу, ибо с c# не знаком вообще. Возможно, кто-нить другой ответит.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

ilgiz_vafin
Сообщения: 19
Зарегистрирован: 05 апр 2012, 11:52

Re: асинхронный hhtp запрос

Сообщение ilgiz_vafin » 05 апр 2012, 15:51

В любом случае спасибо. А вообще это хорошая практика вот так на каждый запрос создавать новый поток?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: асинхронный hhtp запрос

Сообщение damager82 » 09 апр 2012, 09:06

ilgiz_vafin писал(а):В любом случае спасибо. А вообще это хорошая практика вот так на каждый запрос создавать новый поток?
Хороший вопрос. Думаю, да. Так делается в учебниках. И насколько я знаю, Java-thread завершается, когда выполняет свой run.
Тут надо архитектуру Java очень хорошо знать, чтобы точно ответить.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

ilgiz_vafin
Сообщения: 19
Зарегистрирован: 05 апр 2012, 11:52

Re: асинхронный hhtp запрос

Сообщение ilgiz_vafin » 09 апр 2012, 12:57

damager82 писал(а):
ilgiz_vafin писал(а):В любом случае спасибо. А вообще это хорошая практика вот так на каждый запрос создавать новый поток?
Хороший вопрос. Думаю, да. Так делается в учебниках. И насколько я знаю, Java-thread завершается, когда выполняет свой run.
Тут надо архитектуру Java очень хорошо знать, чтобы точно ответить.
Добрый день.
Я попробовал реализовать метод

Код: Выделить всё

public abstract T execute (HttpUriRequest request, ResponseHandler<? extends T> responseHandler)
где responseHandler, как я понял и является callback-функцией.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: асинхронный hhtp запрос

Сообщение andev » 09 апр 2012, 13:57

damager82 писал(а): И насколько я знаю, Java-thread завершается, когда выполняет свой run.
добавлю, что отслеживать это можно в Eclipse на Perspective Debug, вкладка Debug, там все потоки отображаются.

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: асинхронный hhtp запрос

Сообщение neoksi » 02 сен 2012, 20:51

А как в поток получить данные из UI элементов?

UPD: все разобрался сам.

Ответить