okhttp3的使用以及Gson解析資料
阿新 • • 發佈:2018-12-18
匯入
首先必須匯入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)的連線