Страница 1 из 1

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

Добавлено: 05 апр 2012, 12:01
ilgiz_vafin
Всем привет.
Подскажите пожалуйста как реализовать асинхронный вызов

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

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

HttpResponse response = httpclient.execute(request);

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

Добавлено: 05 апр 2012, 12:51
damager82
Можно так.
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) {
			}
		}
	};
}

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

Добавлено: 05 апр 2012, 14:16
ilgiz_vafin
А нет возможности сделать callback метод по аналогии с c#?

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 02 сен 2012, 20:51
neoksi
А как в поток получить данные из UI элементов?

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