それを行う最も簡単な方法は、次のようなことをすることです
//Body of your click handler
Thread thread = new Thread(new Runnable(){
@Override
public void run(){
//code to do the HTTP request
}
});
thread.start();
これにより、メソッド内のコードがrun()
新しい実行スレッドで実行されます。個人的には使用したことがありませんが、必要に応じて非同期タスクを調べることができます。これは、物事を成し遂げるための迅速かつ簡単な方法です。
情報を返すことに関しては、特定のスレッドのメッセージ キューを効果的に設定し、特定のコードの実行を引き起こすメッセージをそれに渡すことができるHandler オブジェクトを使用します。これを行う必要があるのは、Android では UI スレッド以外のスレッドが実際の UI を更新できないためです。
それはあなたの質問に答えていますか?私の最初のパスがあなたの問題のすべてに完全に対処していないことは知っています。
編集基本的に、あなたがすることは、Activity
好きなようにハンドラーオブジェクトを定義することです
private Handler handler_ = new Handler(){
@Override
public void handleMessage(Message msg){
}
};
int
また、ハンドラーに何をすべきかを伝えるのに役立つ静的定数も作成します。基本的にこれらを使用して、いくつかの異なるタイプのメッセージをハンドラーの 1 つのインスタンスに渡すことができます。返されるメッセージが 1 つだけの場合は、心配する必要はありません。
例えば
private static final int UPDATE_UI = 1;
呼び出すハンドラにメッセージを送信するには
handler_.sendMessage(Message.obtain(handler_, UPDATE_UI, inputStreamInstance));
ハンドラーから:
private Handler handler_ = new Handler(){
@Override
public void handleMessage(Message msg){
switch(msg.what){
case UPDATE_UI:
InputStream is = (InputStream)msg.obj;
//do what you need to with the InputStream
break;
}
}
};
または、inputStreamInstance がオブジェクトに追加されているMessage
場合は、任意のオブジェクトを渡すことができるので、それをある種のコンテナー オブジェクトなどに解析したい場合は、それも同様に行うことができます。ハンドラー内からそのオブジェクトにキャストするだけです。