Android Http网络请求封装
来源:互联网 发布:不亦说乎 不亦悦乎 编辑:程序博客网 时间:2024/05/22 17:42
1.先写一个接口OnHttpRequest.java,用来回调
package com.jandar.http;public interface OnHttpRequest {/** * 执行加载之前会先判断是否有网络,若无网络则此方法被回调 */public void httpNoInternet();/** * 开始加载时回调此方法,可在此处设置进度条 */public void httpStartLoad();/** * 加载出错时回调,例如服务器未开启,加载超时等错误 */public void httpError();/** * 返回请求结果 */public void httpResult(String result);}
2. 再封装HttpHandler类
package com.jandar.http;import android.os.Handler;import android.os.Message;public class HttpHandler extends Handler {private OnHttpRequest request;public static final int HTTP_NO_INTERNET = 100;public static final int HTTP_START = 101;public static final int HTTP_ERROR = 102;public static final int HTTP_COMPLETE = 103;public HttpHandler(OnHttpRequest request) {this.request = request;}@Overridepublic void handleMessage(Message msg) {if (request == null) {return;}switch (msg.what) { case HTTP_NO_INTERNET:request.httpNoInternet();break;case HTTP_START:request.httpStartLoad();break;case HTTP_ERROR:request.httpError();break;case HTTP_COMPLETE:request.httpResult(msg.obj.toString());break;}}}3. 写公共Activity类,用于子类继承
package com.jandar.ui;import java.io.InputStream;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.os.Message;import com.jandar.http.HttpHandler;import com.jandar.http.OnHttpRequest;public class BaseActivity extends Activity {private HttpHandler handler;protected void setOnHttpRequest(OnHttpRequest request) {handler = new HttpHandler(request);}protected void getResult(final String url) {new Thread() {@Overridepublic void run() {if (!isConnected()) {handler.sendEmptyMessage(HttpHandler.HTTP_NO_INTERNET);return;}handler.sendEmptyMessage(HttpHandler.HTTP_START);try {Thread.sleep(3000);} catch (InterruptedException e1) {e1.printStackTrace();}HttpClient client = new DefaultHttpClient();HttpGet get = new HttpGet(url);try {HttpResponse response = client.execute(get);InputStream is = response.getEntity().getContent();if (is == null) {handler.sendEmptyMessage(HttpHandler.HTTP_ERROR);return;}StringBuilder builder = new StringBuilder();byte[] buffer = new byte[1024];int index = -1;while ((index = is.read(buffer)) != -1) {builder.append(new String(buffer, 0, index));}is.close();handler.sendMessage(Message.obtain(handler, HttpHandler.HTTP_COMPLETE,builder.toString()));} catch (Exception e) {e.printStackTrace();handler.sendEmptyMessage(HttpHandler.HTTP_ERROR);}}}.start();}// 判断是否存在网络private boolean isConnected() {ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);if (cm != null) {NetworkInfo[] info = cm.getAllNetworkInfo();if (info != null) {for (int i = 0; i < info.length; i++) {if (info[i].getState() == NetworkInfo.State.CONNECTED) {return true;}}}}return false;}}
4. 最后写测试Activity,xml布局文件比较简单,就不贴了
package com.jandar.test;import android.content.Context;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import com.jandar.http.OnHttpRequest;import com.jandar.puke.R;import com.jandar.ui.BaseActivity;public class MainActivity extends BaseActivity implements OnClickListener, OnHttpRequest {private TextView _text;private EditText _edit;private Button _button;private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);context = this;initXML();}private void initXML() {_text = (TextView) findViewById(R.id.text);_edit = (EditText) findViewById(R.id.edit);_button = (Button) findViewById(R.id.button);_button.setOnClickListener(this);setOnHttpRequest(this);}@Overridepublic void onClick(View v) {getResult("http://www.baidu.com");}@Overridepublic void httpNoInternet() {_text.setText("当前无网络连接..");}@Overridepublic void httpStartLoad() {_text.setText("正在加载,请稍候..");}@Overridepublic void httpError() {_text.setText("加载出错了..");}@Overridepublic void httpResult(String result) {_text.setText("处理的结果是: \n" + result);}}核心思想就是通过java的接口回调机制来解决Android的非UI线程不能更新UI的问题
0 0
- Android Http网络请求封装
- Android封装Http请求
- 使用android-async-http来封装Android网络请求框架
- android封装网络请求
- Android 网络编程——HTTP请求的封装
- 关于android-async-http的使用,封装网络请求
- android开发游记:封装http请求,快速实现网络加载
- Android基于http封装的网络请求框架
- 安卓网络请求封装--Android-Async-Http
- android 网络请求 http
- Android中封装Http请求
- android Http异步请求封装
- Android网络请求代码封装
- android Xutils3网络请求封装
- Android网络请求简单封装
- Android封装OkHttp网络请求
- 项目优化-Http网络请求的封装
- Android 3.0 http网络请求
- UVA - 111 History Grading
- web服务器模拟实现
- delphi——常用问题与解决方法
- 在联想工作之余总结的知识———— java保留两位小数4种方法
- debian系统Keepalived+redis实现高可用
- Android Http网络请求封装
- 几种数据库串行化隔离级别对比
- 从傅里叶变换的角度谈宿命论
- 【边做项目边学Android】知识点:SharedPreferences
- 函数第二节
- struct和typedefstruct的区别
- 第10周项目4-大奖赛计分
- [Nginx]并发数问题思考:worker_connections,worker_processes与 max clients
- 微信公众平台订阅号、服务号和企业号三者之间的区别与联系