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