优秀的编程知识分享平台

网站首页 > 技术文章 正文

Android Http协议(http协议违背)

nanyue 2024-08-01 22:50:15 技术文章 7 ℃

http协议

1要有一个http接口

2初始化一个HttpURLConnection对象

conn = (HttpURLConnection) new URL(servletURL).openConnection();

3.设置基本参数和属性

4传参

5接受返回参数

下面代码是BODY形式的POST请求例子

public GetDataFromServer sendObjToServerJson(PostDataToServer _obj) {
    //服务端返回对象
    GetDataFromServer fs = null;
    //最终要返回给客户端的字符串
    String errorStr = null;
    //出错时把异常也记录下来
    Exception exception = null;
    //Http连接
    HttpURLConnection conn = null;
    //出 流对象
    OutputStream objOut = null;
    //入 流对象
    InputStream objIn = null;
    try {
        String servletURL =
                "https://mp.toutiao.com/profile_v4/graphic/publish";
        //可读/写  初始化HttpURLConnection
        conn = (HttpURLConnection) new URL(servletURL).openConnection();
        /// 可输出信息
        conn.setDoOutput(true);

        //** 如果不需要读取服务端返回数据时,则不需要显示设置c.setDoInput(false),
        //** 如果需要读取则需要c.setDoInput(true),一定要注意这一点!
        //** [附言]如果不需要读取服务端数据时,且错误地显示设置c.setDoInput(false)则服务端将无法接收到客户
        //** 端请求(正确的做法是不需要显示设置它!)
        // 需传回信息
        conn.setDoInput(true);

        // 不需要缓存
        conn.setUseCaches(false);
      
        //设置请求方式
        conn.setRequestMethod("POST")

        //设置请求参数为json格式
        conn.setRequestProperty("Content-Type", "application/json");

        //额外头信息
        conn.setRequestProperty("token", "token123");

        //超时时间
        conn.setConnectTimeout(30 * 1000);

        //传参start
        //将传参转换为json格式的字符串
        String json = new Gson().toJson(_obj);

        byte[] bs = json.getBytes("UTF-8");

        OutputStream out = conn.getOutputStream();
        out.write(bs);
        out.flush();
        out.close();
        objOut = out;
        //传参end

        //接收参数 start
        GetDataFromServer[] dfses = new GetDataFromServer[1];

        InputStream is = conn.getInputStream();
        int ch;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((ch = is.read()) != -1)
            bos.write(ch);
        is.close();
        byte[] bs = bos.toByteArray();
        bos.close();

        // 接收的数据是JSON文本描述的GetDataFromServer对象
        String res = new String(bs, "UTF-8");

        dfsesHandle[0] = new Gson().fromJson(res, GetDataFromServer.class);
        objIn= is;

        //将GetDataFromServer对象保存下来
        fs = dfses[0];
        //接收参数end

    } catch (Exception e) {
        errorStr = "May be due to network connectivity problems, " + e.getMessage();
        exception = e;
        e.printStackTrace();
    } finally {
        try {
            if (objOut != null) {
                objOut.close();
                objOut = null;
            }

            if (conn != null) {
                conn.disconnect();
                conn = null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //到了这一步还是null表示与服务端交互的过程中出错了
    //那么接下来实例化的这个对象主要就是存放错误信息了(用于提示用户)
    if (fs == null) {
        fs = new GetDataFromServer();
        fs.setCode(Const.HTTP_CODE_ERROR);
        fs.setMsg("Exception cause for sending datas." + errorStr + exception.getCause());
        return fs;
    }
public class PostDataToServer {
    protected boolean doInput = true;

    protected Object newData;
    protected Object oldData;
    protected String token = null;


    public PostDataToServer() {
    }

    public static PostDataToServer n() {
        return new PostDataToServer();
    }

    public Object getNewData() {
        return this.newData;
    }

    public PostDataToServer setNewData(Object newData) {
        this.newData = newData;
        return this;
    }

    public Object getOldData() {
        return this.oldData;
    }

    public PostDataToServer setOldData(Object oldData) {
        this.oldData = oldData;
        return this;
    }


    public boolean isDoInput() {
        return this.doInput;
    }

    public void setDoInput(boolean doInput) {
        this.doInput = doInput;
    }

    public String getToken() {
        return this.token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}
public class GetDataFromServer implements Serializable {
    private int code;
    private String msg;
    private Object data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

Tags:

最近发表
标签列表