android框架搭建——封装一个属于自己的网络工具类
来源:互联网 发布:犹太神话 知乎 编辑:程序博客网 时间:2024/06/06 06:48
之前使用AsyncHttpClient,Volley等网络框架,总觉得"占地面积"太大,比较理想的情况是用一两行代码就可以获取接口的数据,所以决定自己封装一个网络工具类。不多说,直接上代码;
package com.xiaoteng.dms.utils;import java.util.ArrayList;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.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.json.JSONObject;import android.annotation.SuppressLint;import android.annotation.TargetApi;import android.os.Build;import android.os.StrictMode;import android.util.Log;public class SyncHttpUtil {public static JSONObject sendGet(String baseUrl, String[] params, String[] values) {String url = null == params[0] ? baseUrl : baseUrl + "?" + params[0] + "=" + values[0];if (params.length >= 2) {for (int i = 1; i < params.length; i++) {url = url + "&" + params[i] + "=" + values[i];}}HttpGet request = new HttpGet(url);HttpClient client = new DefaultHttpClient();JSONObject result = null;try {HttpResponse response = client.execute(request);String res = "";if (response.getStatusLine().getStatusCode() == 200) {res = EntityUtils.toString(response.getEntity());}result = new JSONObject(res);} catch (Exception e) {e.printStackTrace();Log.i("info", "e>>" + e);}return result;}public static JSONObject sendPost(String baseUrl, String[] params, String... values) {List<NameValuePair> list = null;JSONObject result = null;if (params.length > 0) {for (int i = 1; i < params.length; i++) {NameValuePair nameValue = new BasicNameValuePair(params[i], values[i]);list = new ArrayList<NameValuePair>();list.add(nameValue);}}try {HttpEntity entity = new UrlEncodedFormEntity(list, "utf-8");HttpPost request = new HttpPost(baseUrl);request.setEntity(entity);HttpClient client = new DefaultHttpClient();HttpResponse response = client.execute(request);String res = "";if (response.getStatusLine().getStatusCode() == 200) {res = EntityUtils.toString(response.getEntity());}result = new JSONObject(res);} catch (Exception e) {e.printStackTrace();}return result;}}调用sendGet方法时只要填写url,接口参数names,接口参数values三个参数即可获取到接口数据,十分方便。但在调用一些接口会报RunOnMainThread错误,即在主线程中执行错误。若想解决这个错误,又想保持代码的同步性,即保证在调完接口后再进行下一步操作,那么需要对工具类进行一些修改:
<span style="white-space:pre"></span>// 碰到RunOnMainThread问题,,要加这两个@@TargetApi(Build.VERSION_CODES.GINGERBREAD)@SuppressLint("NewApi")public static JSONObject sendGet(String baseUrl, String[] params, String[] values) {/* * 解决netwok问题 */StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);String url = null == params[0] ? baseUrl : baseUrl + "?" + params[0] + "=" + values[0];if (params.length >= 2) {for (int i = 1; i < params.length; i++) {url = url + "&" + params[i] + "=" + values[i];}}Log.i("info", "url>" + url);HttpGet request = new HttpGet(url);HttpClient client = new DefaultHttpClient();JSONObject result = null;try {HttpResponse response = client.execute(request);String res = "";if (response.getStatusLine().getStatusCode() == 200) {res = EntityUtils.toString(response.getEntity());}result = new JSONObject(res);} catch (Exception e) {e.printStackTrace();Log.i("info", "e>>" + e);}return result;}
ok了,这样一个简单的网络工具类就封装好了,若是想提高项目的性能,采用异步的形式获取数据,直接new Thread()一个新线程,在线程里面调用工具类即可。至于工具类里面的各行代码就不详细解释了,都是最基本的HttpClient操作。使用HttpClient需要两个jar包:httpclient-4.5.1.jar,httpcore-4.4.3.jar,在网上直接搜httpcomponents-client-4.5.1即可。
4 1
- android框架搭建——封装一个属于自己的网络工具类
- android框架搭建——封装一个属于自己的数据存储工具类(sharedPreferences篇)
- android框架搭建——封装一个属于自己的数据存储工具类(SQLite篇)
- swift-自己封装的一个网络工具
- 封装一个属于自己的mvc框架(1)
- 封装一个属于自己的mvc框架(2)
- 封装一个属于自己的mvc框架(3)
- node入门——搭建属于自己的express框架
- 自己封装的RN的网络工具类
- Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- 搭建属于自己的万能系统框架(Android)
- Android程序员搭建一个属于自己的服务器
- xUtils封装一个网络工具类
- 搭建一个属于自己的博客平台
- 简易Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- 快速开发一个属于自己的android数据库类库
- Android自定义一个属于自己的刻度尺
- hibernate继承关系映射方法(三)--每个具体类一张表TPC
- 最好的GIT中文指南--pro git
- image
- [Web前端]梳理-HTML5.2.新表单元素
- Spring4.2.0设计思想---总体架构
- android框架搭建——封装一个属于自己的网络工具类
- 领域驱动开发模式s
- java反射机制(1)- 知识点总结Java Reflection API操作
- AndroidRobot目前已经开源了
- Classes and Fields in Scala
- USACO sort3
- 先来先服务(FCFS)算法
- mac ox 10.11 brew安装Nginx+PHP+MySQL+扩展
- ubuntu14.3下安装ns2.35安装详解