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中调用,怎么样,是不是很方便呢。

 

posted @ 2014-11-18 11:22  zhrain  阅读(6306)  评论(6编辑  收藏  举报