android中Http类的封装
16lz
2021-01-26
原文地址
http://datuo.iteye.com/blog/1094994
运行效果:
这篇主要是对http网络请求的总结。
http的封装:
- 在httpConnection中配置一些连接属性,向handler发送数据。
- ConnectionManager中开启线程,进行网络链接。
- HttpHandler接收返回的数据并处理。
在activity中的代码:
public class MainActivity extends Activity { private Button button_get; private TextView textview; // 获取北京天气json数据; private static final String url_bj = "http://m.weather.com.cn/atad/101010100.html"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button_get = (Button) findViewById(R.id.bt_get); textview = (TextView) findViewById(R.id.textview); button_get.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub new HttpConnection(handler).get(url_bj); } }); } private Handler handler = new HttpHandler(MainActivity.this) { //正在加载中; @Override protected void onLoading() { // TODO Auto-generated method stub textview.setText("正在加载中..."); } //请求成功后返回的数据; @Override protected void onSuccess(JSONObject jObject) { // TODO Auto-generated method stub if (jObject != null) { textview.setText(jObject.toString()); } } //返回数据失败的回调; @Override protected void onFailure(JSONObject jObject) { // TODO Auto-generated method stub textview.setText(jObject + ""); } };}
HttpHandler代码,httphandler一个抽象类:onSucess()和onFailure()
两个抽象方法。处于不同状态,返回不同的回调。
public abstract class HttpHandler extends Handler { public static final int STATE_START = 0; public static final int STATE_ERROR = 1; public static final int STATE_SUCCEED = 2; private Context context; public HttpHandler(Context context) { this.context = context; } //正在连接中 protected abstract void onLoading(); //数据返回成功; protected abstract void onSuccess(JSONObject jObject); //连接失败; protected abstract void onFailure(JSONObject jObject); public void handleMessage(Message msg) { // TODO Auto-generated method stub switch (msg.what) { case STATE_START: onLoading(); break; case STATE_SUCCEED: Object obj = msg.obj; if (obj != null) { try { JSONObject json = new JSONObject(obj.toString()); onSuccess(json); } catch (JSONException e) { onSuccess(null); } } case STATE_ERROR: Object e = msg.obj; if (e != null) { JSONObject json; try { json = new JSONObject(e.toString()); } catch (JSONException e1) { // TODO Auto-generated catch block onFailure(null); } } break; } }}
HttpConnection配置get,post等请求。然后发送handler。
public class HttpConnection implements Runnable { private static final int GET = 0; private static final int POST = 1; private static final int PUT = 2; private static final int DELETE = 3; private static final int BITMAP = 4; private String url; private int method; private Handler handler; private List<NameValuePair> data; private HttpClient httpClient; public HttpConnection() { this(new Handler()); } public HttpConnection(Handler handler) { // TODO Auto-generated constructor stub this.handler = handler; } public void create(int method, String url, List<NameValuePair> data) { this.method = method; this.url = url; this.data = data; ConnectionManager.getInstance().push(this); } public void get(String url) { create(GET, url, null); } public void post(String url, List<NameValuePair> data) { create(POST, url, data); } public void put(String url, List<NameValuePair> data) { create(PUT, url, data); } public void delete(String url) { create(DELETE, url, null); } public void bitmap(String url) { create(BITMAP, url, null); } @Override public void run() { // TODO Auto-generated method stub handler.sendMessage(Message.obtain(handler, HttpHandler.STATE_START)); httpClient = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 6000); try { HttpResponse response = null; switch (method) { case GET: HttpGet httpGet = new HttpGet(url); response = httpClient.execute(httpGet); break; case POST: HttpPost httpPost = new HttpPost(); httpPost.setEntity(new UrlEncodedFormEntity(data, HTTP.UTF_8)); break; case PUT: HttpPut httpPut = new HttpPut(url); httpPut.setEntity(new UrlEncodedFormEntity(data, HTTP.UTF_8)); response = httpClient.execute(httpPut); break; } if (method < BITMAP) { processEntity(response.getEntity()); } } catch (Exception e) { // TODO Auto-generated catch block handler.sendMessage(Message.obtain(handler, HttpHandler.STATE_ERROR, e)); } ConnectionManager.getInstance().didComlete(this); } private void processEntity(HttpEntity entity) throws IllegalStateException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader( entity.getContent())); String line, result = ""; while ((line = br.readLine()) != null) result += line; Message message = Message.obtain(handler, HttpHandler.STATE_SUCCEED, result); handler.sendMessage(message); }}
demo下载地址http://download.csdn.net/detail/androidxiaogang/9215257
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 一句话锁定MySQL数据占用元凶
- SharedPreferences读写介绍
- Android(安卓)四大组件之 Activity(二)
- Android(安卓)Contact分析(一):Data, RawContact, Contact之间的关
- Android简明开发教程十:数据绑定Data Binding
- Android(安卓)- 监视数据库的变化
- 【Android(安卓)Developers Training】 97. 序言:访问通讯录数据
- 用SparseArray代替HashMap