Android之提交資料到服務端方法簡單封裝
阿新 • • 發佈:2018-12-31
在Android應用中,除了單機版的應用,其餘的應用免不了需要頻繁地與服務端進行資料互動,如果每一種方法都獨立寫一段程式碼,那會造成程式碼大量重複,冗餘,這不是我們所希望的,所以我們可以對其進行一些封裝,這樣不但可以提高程式碼質量,最重要的是我們自己用起來也爽啊。
首先,我們先建立個webservice資料夾,再在裡面新建3各類:HttpUtils.java ;Webservice.java ;WebserviceHelp.java。
先介紹WebserviceHelp,這個類裡面不含任何方法程式碼,只包含一些引數。
1 public class WebserviceHelp2 { 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中呼叫,怎麼樣,是不是很方便呢。