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

  • 相关阅读:
    Java实现 LeetCode 284 顶端迭代器
    Java实现 LeetCode 284 顶端迭代器
    Java实现 LeetCode 283 移动零
    Java实现 LeetCode 283 移动零
    Java实现 LeetCode 283 移动零
    Java实现蓝桥杯VIP 算法训练 阶乘末尾
    nginx自定义模块编写-根据post参数路由到不同服务器
    nginx location的管理以及查找
    nginx的请求接收流程(二)
    nginx的请求接收流程(一)
  • 原文地址:https://www.cnblogs.com/zhrxidian/p/4105264.html
Copyright © 2020-2023  润新知