原文地址
http://datuo.iteye.com/blog/1094994
运行效果:

这篇主要是对http网络请求的总结。
http的封装:

  1. 在httpConnection中配置一些连接属性,向handler发送数据。
  2. ConnectionManager中开启线程,进行网络链接。
  3. 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

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. SharedPreferences读写介绍
  4. Android(安卓)四大组件之 Activity(二)
  5. Android(安卓)Contact分析(一):Data, RawContact, Contact之间的关
  6. Android简明开发教程十:数据绑定Data Binding
  7. Android(安卓)- 监视数据库的变化
  8. 【Android(安卓)Developers Training】 97. 序言:访问通讯录数据
  9. 用SparseArray代替HashMap

随机推荐

  1. Android System Property分析(1):property
  2. Android调用微信扫一扫和支付宝扫一扫
  3. 【Android】带进度条的WebView
  4. 《Android开发从零开始》——27.使用SAX
  5. Android开发方式分析
  6. android 百度地图 定位获取位置失败 62错
  7. 找不到android系统库的解决方案
  8. Android仿微信底部按钮滑动变色
  9. Android(安卓)studio 解决各种错误
  10. Android Listener侦听的N种写法