做到這純粹是做類似
//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 object,它有效地允許您爲給定線程設置消息隊列並將消息傳遞給它,從而導致執行特定代碼。您需要這樣做的原因是因爲Android不會讓UI線程以外的任何線程更新實際的UI。
這是否解決您的問題?我知道我的第一通並沒有完全解決你所有的問題。
編輯基本上,你要做的就是在你的Activity
定義處理對象像
private Handler handler_ = new Handler(){
@Override
public void handleMessage(Message msg){
}
};
您還可以創建靜態int
常量,幫助告訴處理器做什麼。您基本上使用這些來允許將幾種不同類型的消息傳遞給處理程序的一個實例。如果只有一條消息傳回去,那麼你不必擔心這一點。
例如
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
對象,如果你想解析它,你可以傳遞任何你喜歡的對象對某種容器對象或類似的東西,你也可以這樣做。只需從處理程序中將其重新轉換回該對象即可。
感謝您的幫助http請求的程序。關於從單獨的線程發送和接收信息,我仍然遇到一些麻煩。我更新了我的問題,希望能夠澄清我需要做的事情。關於Handler對象,我會在輔助線程中使用它來傳回信息,例如輸入流? – mbauer14 2010-08-02 20:22:41