【Android新手笔记五】okhttp3网络通信框架
2016-06-02 14:58
597 查看
项目需要实现与服务器的数据传输。
只是进行表格数据的传输,不包含文件的上传下载,因此选择了虽然数据量不大但传输速度快的http通信协议。
尝试使用过volley类,不知道为啥没有捣鼓成功就去用了比较新的okhttp3~
参考鸿洋大神的博客http://blog.csdn.net/lmj623565791/article/details/47911083
首先直接导入了鸿洋大神的github封装类:
compile 'com.zhy:okhttputils:2.3.9' //build.gradle文件里写下这一行就好
别忘了还需要网络授权,就是在配置文件里application前加一行
<uses-permission android:name="android.permission.INTERNET"/>
之后在activity中导入相关okhttp3的类包进行数据传输,大概的类包是这些:
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;采用post请求向服务器传输json数据并处理返回的代码:
final MediaType JSON
= MediaType.parse("application/json; charset=utf-8"); //编码格式,utf-8
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("tag", "clinic_reception_get");
jsonObject.put("name", stringname);
jsonObject.put("userID", stringID);
jsonObject.put("number", number); //上传到服务器的jsonobject键值对
} catch (JSONException e) {
e.printStackTrace();
}
RequestBody body = FormBody.create(JSON, jsonObject.toString()); //post的数据格式转化
OkHttpClient client = new OkHttpClient(); //创建okhttpClient对象
Request request = new Request.Builder().url(URL).post(body).build(); //创建一个request
Call call= client.newCall(request); //回调函数
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) { //请求失败
}
@Override
public void onResponse(Call call, Response response) throws IOException { //请求成功
try {
JSONObject object = new JSONObject(response.body().string()); //返回的json数据
error = object.getBoolean("error");
if (!error) {
name.setText(object.getString("name"));
age.setText(object.getString("age"));
date.setText(object.getString("date"));
subject_info.setText(object.getString("subject_info"));
object_info.setText(object.getString("object_info"));
assessment.setText(object.getString("assessment"));
recipe.setText(object.getString("recipe"));
reception_doctor.setText(object.getString("reception_doctor"));
} else {
String errorMsg = object.getString("error_msg");
Looper.prepare();
Toast toast = Toast.makeText(getApplicationContext(), errorMsg,
Toast.LENGTH_LONG);
toast.show();
Looper.loop();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
如果线程冲突,可以新建一个子线程,再执行数据传输操作试试~
只是进行表格数据的传输,不包含文件的上传下载,因此选择了虽然数据量不大但传输速度快的http通信协议。
尝试使用过volley类,不知道为啥没有捣鼓成功就去用了比较新的okhttp3~
参考鸿洋大神的博客http://blog.csdn.net/lmj623565791/article/details/47911083
首先直接导入了鸿洋大神的github封装类:
compile 'com.zhy:okhttputils:2.3.9' //build.gradle文件里写下这一行就好
别忘了还需要网络授权,就是在配置文件里application前加一行
<uses-permission android:name="android.permission.INTERNET"/>
之后在activity中导入相关okhttp3的类包进行数据传输,大概的类包是这些:
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;采用post请求向服务器传输json数据并处理返回的代码:
final MediaType JSON
= MediaType.parse("application/json; charset=utf-8"); //编码格式,utf-8
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("tag", "clinic_reception_get");
jsonObject.put("name", stringname);
jsonObject.put("userID", stringID);
jsonObject.put("number", number); //上传到服务器的jsonobject键值对
} catch (JSONException e) {
e.printStackTrace();
}
RequestBody body = FormBody.create(JSON, jsonObject.toString()); //post的数据格式转化
OkHttpClient client = new OkHttpClient(); //创建okhttpClient对象
Request request = new Request.Builder().url(URL).post(body).build(); //创建一个request
Call call= client.newCall(request); //回调函数
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) { //请求失败
}
@Override
public void onResponse(Call call, Response response) throws IOException { //请求成功
try {
JSONObject object = new JSONObject(response.body().string()); //返回的json数据
error = object.getBoolean("error");
if (!error) {
name.setText(object.getString("name"));
age.setText(object.getString("age"));
date.setText(object.getString("date"));
subject_info.setText(object.getString("subject_info"));
object_info.setText(object.getString("object_info"));
assessment.setText(object.getString("assessment"));
recipe.setText(object.getString("recipe"));
reception_doctor.setText(object.getString("reception_doctor"));
} else {
String errorMsg = object.getString("error_msg");
Looper.prepare();
Toast toast = Toast.makeText(getApplicationContext(), errorMsg,
Toast.LENGTH_LONG);
toast.show();
Looper.loop();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
如果线程冲突,可以新建一个子线程,再执行数据传输操作试试~
相关文章推荐
- http接口调用
- 各类 HTTP 返回状态代码详解
- Neural networks and deep learning materials
- https://github.com/justjavac/free-programming-books-zh_CN
- 网络编程:Reactor与Proactor的概念(设计模式)
- HttpServlet详解
- 网络协议
- TCP/IP参考模型
- 数据路链路层、网络层、传输层
- HTTP状态码
- IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”)
- xmlhttp 收发二进制数据 (Sending and Receiving Binary Data)
- 计算机网络分类
- ubuntu-server14.04 网络配置
- AFN(3.1.0) 图片上传 与 AFHTTPRequestOperation 上传的不同
- 网络编程--JAVA之多线程下载后续:断点续存
- opencv-ios开发笔记7 神经网络 分类器
- IPC网络高清摄像机基础知识0(TI 海思 安霸方案分析“来自2014年”)
- 浅谈HTTP中Get与Post的区别
- 【Android】WebView加载https页面不能正常显示资源问题