您的位置:首页 > 理论基础 > 计算机网络

【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();
}

}
});

如果线程冲突,可以新建一个子线程,再执行数据传输操作试试~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: