导入
首先必须导入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)的连接