okhttp3的使用以及Gson解析数据

导入

首先必须导入okhttp3额依赖包

compile 'com.squareup.okhttp3:okhttp:3.4.1'

使用

为了复用代码,写一个Uil

package http;

import java.util.concurrent.TimeUnit;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

/**
 * Created by Donview on 2018/7/18.
 */

public class HttpUtil {
    public final static int CONNECT_TIMEOUT = 3;
    public final static int READ_TIMEOUT = 3;
    public final static int WRITE_TIMEOUT = 3;
    public static OkHttpClient client = new OkHttpClient.Builder()
            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)//设置读取超时时间
            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)//设置写的超时时间
            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)//设置连接超时时间
            .build();
    /**
     * Get方法,获取数据
     * 携带seesionKey、无传递数据
     */
    public static void sendOkHttpRequest(final String address, final okhttp3.Callback callback,String sessionKey) {
        Request request = new Request.Builder()
                .header("Grpc-Metadata-sessionkey",sessionKey)
                .url(address)
                .build();
        client.newCall(request).enqueue(callback);
    }

    /**
     * Post方法,发送数据、接收数据
     * 无携带seesionKey、有传递数据
     */
    public static void postJson(final String address,String json, final okhttp3.Callback callback) {
        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
        Request request = new Request.Builder()
                .post(body)
                .url(address)
                .build();
        client.newCall(request).enqueue(callback);
    }

    /**
     * 有携带seesionKey、有传递数据
     */
    public static void postWithSession(final String address,String json, final okhttp3.Callback callback,String sessionKey) {
        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
        Request request = new Request.Builder()
                .header("Grpc-Metadata-sessionkey",sessionKey)
                .post(body)
                .url(address)
                .build();
        client.newCall(request).enqueue(callback);
    }
}

代码中调用:

HttpUtil.postJson(HttpValue.LOGIN,json,new MyCallback());
//带请求头和sessionKey的请求
HttpUtil.postWithSession(HttpValue.COMMIT,json,new MyCallBack(), MyApplication.getSessionKey());

MyCallBack是网络请求回调类:

//网略请求回调
    private class MyCallback implements okhttp3.Callback {
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            int code2=response.code();
            if (code2==200){
                //得到服务器返回的具体内容
                String responseData=response.body().string();
                
                //获取数据
                try {
                    JSONObject jsonObject = new JSONObject(responseData);
                    int code=jsonObject.getInt("code");
                   
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            
        }
        @Override
        public void onFailure(Call call,IOException e){
            if (e instanceof SocketTimeoutException) {
                //判断超时异常
                sendMyMessage(-1);
            }
            if (e instanceof ConnectException) {
                //判断连接异常,
                sendMyMessage(-2);
            }
        }
    }

Gson解析

Bean转Json

导入包:

compile 'com.google.code.gson:gson:2.6.2'

首先先写javaBean如UserBean

package user;

import gsonbean.Task_content;

/**
 * Created by Donview on 2018/7/17.
 */

public class UserBean {
    private int page;
    private int role;
    private int task_type;
    private long deadline_timestamp;
    private String password;
    private String sessionKey;
    private String username;
    private int id;
    private String type;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getSessionKey() {
        return sessionKey;
    }

    public void setSessionKey(String sessionKey) {
        this.sessionKey = sessionKey;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getRole() {
        return role;
    }

    public void setRole(int role) {
        this.role = role;
    }
    /**
     * 作业模块
     */
    private int participate;
    private int class_id;
    private int task_id;
    private AnswerBean[] answers;

    public int getParticipate() {
        return participate;
    }

    public void setParticipate(int participate) {
        this.participate = participate;
    }

    public int getClass_id() {
        return class_id;
    }

    public void setClass_id(int class_id) {
        this.class_id = class_id;
    }

    public int getTask_id() {
        return task_id;
    }

    public void setTask_id(int task_id) {
        this.task_id = task_id;
    }

    public AnswerBean[] getAnswers() {
        return answers;
    }

    public void setAnswers(AnswerBean[] answers) {
        this.answers = answers;
    }

    private Task_content[] task_content;

    public Task_content[] getTask_content() {
        return task_content;
    }

    public void setTask_content(Task_content[] task_content) {
        this.task_content = task_content;
    }

    public int getTask_type() {
        return task_type;
    }

    public void setTask_type(int task_type) {
        this.task_type = task_type;
    }

    public long getDeadline_timestamp() {
        return deadline_timestamp;
    }

    public void setDeadline_timestamp(long deadline_timestamp) {
        this.deadline_timestamp = deadline_timestamp;
    }
}

然后在代码中设置UserBean的值然后 使用Gson转换

userBean.setTask_id(MyApplication.getTask_id());
                userBean.setParticipate(1);
                AnswerBean[] answerBean = new AnswerBean[1];
                AnswerBean bean = new AnswerBean();
                bean.setId(MyApplication.getUserId());
                answerBean[0] = bean;
                userBean.setAnswers(answerBean);

                Gson gson = new Gson();
                String json = gson.toJson(userBean);
                Log.i("TestTopic", "TopicList:json=" + json);

Json转Bean

private void getTopics(String responseData) {
        JsonTopicsBean jsonTopicsBean = new Gson().fromJson(responseData, JsonTopicsBean.class);
    }

其中JsonTopicsBean是自己编写的Bean

package jsonbean.topics;
import java.util.List;

public class JsonTopicsBean {

    private int task_type;
    private String task_name;
    private List<Task_content> task_content;
    public void setTask_type(int task_type) {
        this.task_type = task_type;
    }
    public int getTask_type() {
        return task_type;
    }

    public void setTask_name(String task_name) {
        this.task_name = task_name;
    }
    public String getTask_name() {
        return task_name;
    }

    public void setTask_content(List<Task_content> task_content) {
        this.task_content = task_content;
    }
    public List<Task_content> getTask_content() {
        return task_content;
    }

}

附带在线Json字符串转Java实体类(JavaBean、Entity)的连接

在线转Json

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值