安卓Http Post请求封装类

本文介绍了一个用于Android平台的自定义HTTP Post请求处理类。该类通过继承Thread实现了异步发送HTTP Post请求的功能,并能够处理返回的数据。文章提供了完整的源代码实现。

自己封装了一个安卓Http post请求的发送及处理的线程类,闲着没事扔到这里来

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by xilingyuli on 2015/11/26.
 */
public class HttpPost extends Thread{

    private String connStr;  //连接字符串
    private String method;  //方法名
    private String data;  //发送的数据
    private Message response;  //返回的数据

    HttpPost(String connStr, String method, String data, Message response)
    {
        this.connStr = connStr;
        this.method = method;
        this.data = data;
        this.response = response;
    }

    public void run()
    {
        if(connStr==null||connStr.equals("")||data==null)
            return;
        try {

            byte b[] = data.getBytes("utf-8");

            URL url;
            if(method!=null)
                url = new URL(connStr+"/"+method);
            else
                url = new URL(connStr);

            //设置参数
            HttpURLConnection con = (HttpURLConnection)url.openConnection();
            con.setConnectTimeout(5000);
            con.setUseCaches(false);
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setRequestMethod("POST");

            //设置header
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            //写入数据
            OutputStream os = con.getOutputStream();
            os.write(b);
            os.flush();
            os.close();

            if(response==null)
                return;

            //处理返回的结果
            /*
            * message.what是请求码,若请求码不是200,则返回
            * 若请求码是200,请求成功,则封装数据。有方法名时数据key值为方法名,否则key值为"data"
            * 若出现异常,则数据key值为"error",value为异常详细信息
            */
            response.what = con.getResponseCode();
            if(response.what==HttpURLConnection.HTTP_OK)
            {
                //向bos写入返回的数据
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte buffer[] = new byte[1024];
                InputStream is = con.getInputStream();
                int count = -1;
                while ((count = is.read(buffer, 0, buffer.length)) != -1)
                    bos.write(buffer, 0, count);
                is.close();

                //封装数据
                Bundle bd = new Bundle();
                if(method!=null)
                    bd.putString(method, bos.toString("utf-8"));
                else
                    bd.putString("data", bos.toString("utf-8"));
                response.setData(bd);
            }
            con.disconnect();
            response.sendToTarget();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

            //处理异常
            if(response==null)
                return;
            Bundle bd = new Bundle();
            bd.putString("error",e.getMessage());
            response.setData(bd);
            response.sendToTarget();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值