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

在Android應用中,除了單機版的應用,其他的應用免不了須要頻繁地與服務端進行數據交互,若是每一種方法都獨立寫一段代碼,那會形成代碼大量重複,冗餘,這不是咱們所但願的,因此咱們能夠對其進行一些封裝,這樣不但能夠提升代碼質量,最重要的是咱們本身用起來也爽啊。java

首先,咱們先創建個webservice文件夾,再在裏面新建3各種:HttpUtils.java   ;Webservice.java  ;WebserviceHelp.java。android

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

 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提交方法。  apache

 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類,這裏以登陸爲例子。json

 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中調用,怎麼樣,是否是很方便呢。異步

相關文章
相關標籤/搜索