Android之提交數據到服務端方法簡單封裝

在Android應用中,除瞭單機版的應用,其餘的應用免不瞭需要頻繁地與服務端進行數據交互,如果每一種方法都獨立寫一段代碼,那會造成代碼大量重復,冗餘,這不是我們所希望的,所以我們可以對其進行一些封裝,這樣不但可以提高代碼質量,最重要的是我們自己用起來也爽啊。

 

首先,我們先建立個webservice文件夾,再在裡面新建3各類:HttpUtils.java   ;Webservice.java  ;WebserviceHelp.java。

 

 

 

先介紹WebserviceHelp,這個類裡面不含任何方法代碼,隻包含一些參數。

 

復制代碼

 1 public class WebserviceHelp 

 2 {

 3        /**IP地址或域名*/

 4       protected static String IP = "";

 5       /**Webservice提供地址 */

 6       protected static String URL = IP +"";

 7 

 8      

 9       /*************下面是方法名*************/

10       

11       /**用戶登錄**/

12       protected static final String Login ="login"; 

13    

14 }

復制代碼

接下來我們看看HttpUtils,這個類作用是實現參數的提交,我這裡就隻列出瞭post提交方法。  

 

復制代碼

 1 package sedion.zhr.webservice;

 2 

 3 import java.util.List;

 4 

 5 import org.apache.http.HttpEntity;

 6 import org.apache.http.HttpResponse;

 7 import org.apache.http.NameValuePair;

 8 import org.apache.http.client.HttpClient;

 9 import org.apache.http.client.entity.UrlEncodedFormEntity;

10 import org.apache.http.client.methods.HttpPost;

11 import org.apache.http.impl.client.DefaultHttpClient;

12 import org.apache.http.params.CoreConnectionPNames;

13 import org.apache.http.params.HttpParams;

14 import org.apache.http.util.EntityUtils;

15 import org.json.JSONObject;

16 

17 import android.util.Log;

18 

19 

20 public class HttpUtils 

21 {  

22     /**作為標記在*/

23     private static final String TAG = "HttpUtils處理類";

24     /**用戶識別*/

25      public static final String User_Agent="";     

26 

27      

28      

29      private static JSONObject postrequest(String url,List<NameValuePair> params) 

30      {

31     //在這裡可以進行一些處理,如添加時間戳,對參數進行排序等等

32         

33         try 

34         {

35             //建立JSONObject對象

36              JSONObject object=null;

37              //建立HttpClient對象

38              HttpClient httpClient=new DefaultHttpClient();

39              //設置請求路徑        

40              HttpPost post=new HttpPost(url);  

41              //設置請求參數

42              post.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));    

43              //設置用戶識別

44              post.addHeader("User-Agent", User_Agent);

45              //建立HttpParams對象

46              HttpParams httpParams=post.getParams();

47              //設置讀取超時

48              httpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,10000);

49              //設置請求超時

50              httpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);

51              //發送請求獲得回饋

52              HttpResponse httpResponse=httpClient.execute(post);

53              //取得反饋信息

54              HttpEntity httpEntity=httpResponse.getEntity();

55              //如果httpEntity不為空

56              if(httpEntity!=null )

57              {

58                  String result=EntityUtils.toString(httpEntity);

59                  object=new JSONObject(result);

60                  

61                  Log.i(TAG, "post請求成功:"+ result);

62 

63                  return object;

64              }

65              else    

66              {

67                  Log.e(TAG, "post請求失敗");

68                  return null;

69              }

70         }

71         catch (Exception e) 

72         {

73         

74             Log.i(TAG,e.toString());

75             return null;

76             

77         }

78     

79      }

80          

81      /**

82      * post方法傳參

83      * @param url         ip路徑

84      * @param method      方法名

85      * @param params      參數

87      * @return

88      */

89     public static JSONObject post(String url,String method,List<NameValuePair> params) throws Exception 

90     {        

91         

92             return postrequest(url+method, params);        

93     }

94  

95 }

復制代碼

最後就是Webservice類瞭,這裡寫所需功能瞭,這個類要繼承WebserviceHelp類,這裡以登錄為例子。

 

復制代碼

 1 public class Webservice extends WebserviceHelp

 2 {

 3      

 4     private static final String  Webservice_Tag="網絡服務";

 5     

 6         /***

 7      * 用戶登陸     

 8      * @param userPhone 手機號

 9      * @param password 密碼

10      * @return

11      */

12     public static int login(String userPhone,String password)

13     {

14         JSONObject object;

15         

16         try     

17         {

18             List<NameValuePair> params = new ArrayList<NameValuePair>();

19             

20             params.add(new BasicNameValuePair("userPhone",userPhone));

21             params.add(new BasicNameValuePair("password",password));

22             

23             object = HttpUtils.post(URL, Login, params);

24         

25                

26             return object.optInt("results");

27             

28         }

29         catch(Exception e)

30         {

31             Log.e(Webservice_Tag+Login, e.toString());

32             return -1;

33         }

34         

35     }

36 }

復制代碼

以上方法便已封裝好瞭,接下來就是activity中調用瞭,別的代碼我就不給出瞭,這裡就隻是一個異步處理類。

 

復制代碼

 1  private class LoginAsyncTask extends AsyncTask<String, Integer, Integer>

 2      {

 3 

 4         @Override

 5         protected Integer doInBackground(String… str)

 6         {

 7             if(SystemUtil.isNetworkConnected(LoginActivity.this))

 8             {

 9                 int result = 0;

10                 try 

11                 {

12                     //這裡str[0],str[1]分別為獲得的手機號,密碼

13                     result = Webservice.login(str[0], str[1]);

14                     

15 

16                 } catch (Exception e) 

17                 {

18                     Log.e(LOG_TAG, ""+result);

19                     e.printStackTrace();

20                 }

21                 return result;

22             }

23             else

24             {

25                 return NO_NET;

26             }

27         }

28         

29         @Override

30         protected void onPostExecute(Integer result)

31         {

32             

33             

34             

35             switch (result)

36             {

37             case NO_NET:

38                 ToastUtils.show(LoginActivity.this,R.string.no_net);

39                 break;

40             case SYSTEM_ERROR:

41                 ToastUtils.show(LoginActivity.this, R.string.system_error);

42                 break;

43             case FAIL:

44                 ToastUtils.show(LoginActivity.this, R.string.login_fail);

45                 break;

46             case SUCCESS:

47  

48                 Intent intent = new Intent(LoginActivity.this,MainActivity.class);

49                 startActivity(intent);

50                 break;

51             default:

52                 break;

53             }

54         }

復制代碼

接下來別還需要別的功能方法就可以直接寫在Webservice類裡瞭,然後直接在activity中調用,怎麼樣,是不是很方便呢。

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *