歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

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

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

先介紹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中調用,怎麼樣,是不是很方便呢。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved