Android之提交数据到服务端技巧简单封装
发布时间:2021-11-18 19:15:17 所属栏目:教程 来源:互联网
导读:在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中调用,怎么样,是不是很方便呢。 (编辑:常州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |