android url工具类,android框架搭建——封装一个属于自己的网络工具类

之前使用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 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();

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错误,即在主线程中执行错误。若想解决这个错误,又想保持代码的同步性,即保证在调完接口后再进行下一步操作,那么需要对工具类进行一些修改:

// 碰到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即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值