Android之提交数据到服务端方法简单封装

wsd 2016-05-16

在Android应用中,除了单机版的应用,其余的应用免不了需要频繁地与服务端进行数据交互,如果每一种方法都独立写一段代码,那会造成代码大量重复,冗余,这不是我们所希望的,所以我们可以对其进行一些封装,这样不但可以提高代码质量,最重要的是我们自己用起来也爽啊。

首先,我们先建立个webservice文件夹,再在里面新建3各类:HttpUtils.java   ;Webservice.java  ;WebserviceHelp.java。

Android之提交数据到服务端方法简单封装

先介绍WebserviceHelp,这个类里面不含任何方法代码,只包含一些参数。

public class WebserviceHelp
{
      /**IP地址或域名*/
      protected static String IP = "";
      /**Webservice提供地址 */
      protected static String URL = IP +"";

   
      /*************下面是方法名*************/
     
      /**用户登录**/
      protected static final String Login ="login";
 
}

接下来我们看看HttpUtils,这个类作用是实现参数的提交,我这里就只列出了post提交方法。 

package sedion.zhr.webservice;

import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import android.util.Log;


public class HttpUtils

    /**作为标记在*/
    private static final String TAG = "HttpUtils处理类";
    /**用户识别*/
    public static final String User_Agent="";   

   
   
    private static JSONObject postrequest(String url,List<NameValuePair> params)
    {
    //在这里可以进行一些处理,如添加时间戳,对参数进行排序等等
       
        try
        {
            //建立JSONObject对象
            JSONObject object=null;
            //建立HttpClient对象
            HttpClient httpClient=new DefaultHttpClient();
            //设置请求路径       
            HttpPost post=new HttpPost(url); 
            //设置请求参数
            post.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));   
            //设置用户识别
            post.addHeader("User-Agent", User_Agent);
            //建立HttpParams对象
            HttpParams httpParams=post.getParams();
            //设置读取超时
            httpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,10000);
            //设置请求超时
            httpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
            //发送请求获得回馈
            HttpResponse httpResponse=httpClient.execute(post);
            //取得反馈信息
            HttpEntity httpEntity=httpResponse.getEntity();
            //如果httpEntity不为空
            if(httpEntity!=null )
            {
                String result=EntityUtils.toString(httpEntity);
                object=new JSONObject(result);
               
                Log.i(TAG, "post请求成功:"+ result);

                return object;
            }
            else   
            {
                Log.e(TAG, "post请求失败");
                return null;
            }
        }
        catch (Exception e)
        {
       
            Log.i(TAG,e.toString());
            return null;
           
        }
   
    }
       
    /**
    * post方法传参
    * @param url        ip路径
    * @param method      方法名
    * @param params      参数
    * @return
    */
    public static JSONObject post(String url,String method,List<NameValuePair> params) throws Exception
    {       
       
            return postrequest(url+method, params);       
    }
 
}

最后就是Webservice类了,这里写所需功能了,这个类要继承WebserviceHelp类,这里以登录为例子。

public class Webservice extends WebserviceHelp
{
   
    private static final String  Webservice_Tag="网络服务";
   
        /***
    * 用户登陆   
    * @param userPhone 手机号
    * @param password 密码
    * @return
    */
    public static int login(String userPhone,String password)
    {
        JSONObject object;
       
        try   
        {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
           
            params.add(new BasicNameValuePair("userPhone",userPhone));
            params.add(new BasicNameValuePair("password",password));
           
            object = HttpUtils.post(URL, Login, params);
       
             
            return object.optInt("results");
           
        }
        catch(Exception e)
        {
            Log.e(Webservice_Tag+Login, e.toString());
            return -1;
        }
       
    }
}

以上方法便已封装好了,接下来就是activity中调用了,别的代码我就不给出了,这里就只是一个异步处理类。

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

        @Override
        protected Integer doInBackground(String... str)
        {
            if(SystemUtil.isNetworkConnected(LoginActivity.this))
            {
                int result = 0;
                try
                {
                    //这里str[0],str[1]分别为获得的手机号,密码
                    result = Webservice.login(str[0], str[1]);
                   

                } catch (Exception e)
                {
                    Log.e(LOG_TAG, ""+result);
                    e.printStackTrace();
                }
                return result;
            }
            else
            {
                return NO_NET;
            }
        }
       
        @Override
        protected void onPostExecute(Integer result)
        {
           
           
           
            switch (result)
            {
            case NO_NET:
                ToastUtils.show(LoginActivity.this,R.string.no_net);
                break;
            case SYSTEM_ERROR:
                ToastUtils.show(LoginActivity.this, R.string.system_error);
                break;
            case FAIL:
                ToastUtils.show(LoginActivity.this, R.string.login_fail);
                break;
            case SUCCESS:
 
                Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                startActivity(intent);
                break;
            default:
                break;
            }
        }

接下来别还需要别的功能方法就可以直接写在Webservice类里了,然后直接在activity中调用,怎么样,是不是很方便呢。

相关推荐