okhttp类的简单封装,看连接,有大佬摘出来的操作,实测可以。
说明:设计为单例模式,以及在回调用接口的方法把回调,放入主线程中,这样就可以修改UI了,不过需要注意一点的是,不能传递response到主线程。只能把值传递到主线程,否则报错。
Okhttp类的简单封装
fastjson解析,
写的清楚一点以及理解的话,就是把json数据变成了一个对象,然后就相当于你这个类,去创造够多的字段。一个类就能接受许多的json数据了。
而json里面又有多的json数据的话,就再多一个类。
(由已知,判断创建)
fastjson解析
由于用okhttp类时,用的是map传递数据过去。所以主要是map数据的传入和取出重要。
而当我要传递int[] a=[0,0,0]时,但直接.
int New_Bnad[]={0,0,0,0,2};
map.put(“Old_Band”,Old_JSONBand);
是没办法读出这个数组的。需要转换为JSON数组才行。
int New_Bnad[]={0,0,0,0,2};
JSONArray New_JSONBand = null,Old_JSONBand= null;
try {
New_JSONBand = new JSONArray(New_Bnad);
} catch (JSONException e) {
e.printStackTrace();
}
map.put("New_Band",New_JSONBand);
这样就没有问题了。
传递json数据格式,操作如下.
JSONObject obj = new JSONObject();//表单对象,包含以input开始的对象,以html表单为主
obj.put(entry.getKey(),entry.getValue());
RequestBody body = RequestBody.create(type,""+obj.toString());
Request request = new Request.Builder().url(url).post(body).build();//采用post提交数据
截取一段自己的代码段:
OkHttpUtil httpUtil;
httpUtil = OkHttpUtil.getInstance(MainActivity.this);
//发送请求以及解析数据
HashMap<String,Object> map = new HashMap();
map.put("","");
String url="http://10.0.2.2/py/GTK_frequencyPoint.py";
MediaType type=MediaType.parse("application/json; charset=utf-8");
httpUtil.postJSON(url, map, type, new OkHttpUtil.ResultCallback() {
@Override
public void onError(Request request, Exception e) {
Log.d(TAG, "Button_GetEqPoint,onError: ",e);
}
@Override
public void onResponse(Response response,String responseData) throws IOException {
//String responseData = response.body().string();
Log.d(TAG, "response: "+responseData);
response_fastjson response_fastjson= JSON.parseObject(responseData,response_fastjson.class);
Log.d(TAG, "onResponse: xxx:"+response_fastjson.getStatus());
Log.d(TAG, "onResponse: xxx:"+response_fastjson.getDescribe());
Log.d(TAG, "onResponse: xxx:"+response_fastjson.getBands());
String Text="Status:"+response_fastjson.getStatus()+" Describe:"+response_fastjson.getDescribe()+" Bands:"+response_fastjson.getBands().toString();
mTextView.setText(Text);
// Log.d(TAG, "Button_GetEqPoint_onResponse: "+responseData);
}
});