[英]android http post as a service
任何人都可以請告訴我如何讓這個代碼在后台工作,當我使代碼在后台工作時有什么不同,如“在后台做”和服務,我應采取哪種方法
感謝所有提前
這是代碼:
public void SticketFunction(double book, double libadd, long time){
Log.v("log_tag", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SticketFunction()");
//HttpClient
HttpClient nnSticket = new DefaultHttpClient();
//Response handler
ResponseHandler<String> res = new BasicResponseHandler();
HttpPost postMethod = new HttpPost("http://www.books-something.com");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
nameValuePairs.add(new BasicNameValuePair("book", book+""));
nameValuePairs.add(new BasicNameValuePair("libAss", libass+""));
nameValuePairs.add(new BasicNameValuePair("Time", time+""));
nameValuePairs.add(new BasicNameValuePair("name", "jack"));
//Encode and set entity
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
//Execute
//manSticket.execute(postMethod);
String response =Sticket.execute(postMethod, res).replaceAll("<(.|\n)*?>","");
if (response.equals("Done")){
//Log.v("log_tag", "!!!!!!!!!!!!!!!!!! SticketFunction got a DONE!");
}
else Log.v("log_tag", "!!!!!!!?????????? SticketFunction Bad or no response: " + response);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
//Log.v("log_tag", "???????????????????? SticketFunction Client Exception");
} catch (IOException e) {
// TODO Auto-generated catch block
//Log.v("log_tag", "???????????????????? IO Exception");
}
}
}
您不需要為此服務。 如果您不想在執行HTTP請求時阻止應用程序,我相信您可以使用AsyncTask。 它提供了一個方便的界面,用於顯示ui上的結果。
另一種選擇是使用Handler類。
在Service
中運行任務的好處是,如果用戶退出調用Activity
,則不會銷毀它。
您可以考慮擴展IntentService並實現onHandleIntent ,它可以自動在單獨的線程上運行。
在這種情況下使用Service
(或IntentService
)時,您將在Bundle中傳遞NameValuePair
值。 您還需要將Response
數據保存到持久存儲(數據庫,首選項等),以便以后在Activity
進行檢索。
或者,您可以在常規Service
(實現onStartCommand
)或調用Activity
運行AsyncTask 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.