2011-10-21 67 views
0

任何一個可以請告訴我如何使這個代碼工作的背景和的區別是什麼,當我使代碼在後臺運行,如「做背景」和服務 和哪種方式,我應該採取Android的HTTP POST作爲服務

感謝所有提前

這是代碼:

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"); 
     } 
    } 

} 

回答

1

你並不需要爲這個服務。我相信你可以使用的AsyncTask如果你不想阻止你的應用程序,而這樣做的HTTP請求。它提供了一個方便的界面來顯示用戶界面的結果。

另一種選擇是使用Handler類。

AsyncTask

1

運行在Service任務的好處是,它不被破壞,如果用戶反悔的呼叫Activity

你可以看看延伸IntentService和實施onHandleIntent,它會自動在一個單獨的線程上工作。

在這種情況下使用Service(或IntentService)時,您將在Bundle中傳遞NameValuePair值。您還需要向Response數據持久性存儲(數據庫,喜好等),用於以後的檢索保存在Activity

或者,您可以在常規的Service(實施onStartCommand)或致電Activity中運行AsyncTask