其实我从年前就开始学这个okHttp,只不过一直没成功过,遇到过400,411,500等各种错误,整的我是各种捉急呀,昨天刚开始上班,我又开始整它,还好借着我今天生日寿星最大哈,终于搞出来了,各种泪流满面呀。
好了,说这么多也烦了,开始说说代码吧,这里代码我服务端用的是C# WCF,贴一个声明方法如下。
[OperationContract]
[WebInvoke(
Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest,
UriTemplate = "GetUsers")]
int GetUsers(string userName, string userPwd, String devicecid);
大家可看到这里我的Request和Response用的都是Json,所以这就要求客户端发送的必须是Json请求。
好了,那么,这时候就该OkHttp上场了。
先贴下,手机端点击触发事件的方法
private Object[] parameterValue;
private String[] parameter;
private String method;
//登录方法
private void Login() {
new Thread(new Runnable() {
@Override
public void run() {
method = "GetUsers";
parameter = new String[3];
parameter[0] = "userName";
parameter[1] = "userPwd";
parameter[2] = "devicecid";
parameterValue = new Object[3];
parameterValue[0] = "test";
parameterValue[1] = "admin";
parameterValue[2] = "aaa";
String result = OkHttpClientManager.getInstance()._postAsString(method, parameter,parameterValue);
Message msg = new Message();
msg.obj = result;
msg.what = 1;
hander.sendMessage(msg);
}
}).start();
}
本来传参用的是FormEncodingBuilder ,可因为我的请求是application/json,而FormEncodingBuilder默认的是application/x-www-form-urlencoded ,如果想要修改的话要下载源码进行修改,详细参考http://bbs.csdn.net/topics/391848984?page=1
因为懒,所以选用了流进行传参。好了,直接贴我的代码工具类啦
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
public String _postAsString(String method,final String[] parameter, final Object[] parameterValue){
String myurl = Common.CompanyIp.toString() + "/"+ method; //这里写的是地址
String result = "";
Response response;
try {
RequestBody requestBody = new RequestBody() {
@Override
public MediaType contentType() {
return JSON;
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
DataOutputStream out = new DataOutputStream(sink.outputStream());
JSONObject o = new JSONObject();
for (int i = 0; i < parameter.length; i++) {
try {
o.put(parameter[i], parameterValue[i]);
} catch (JSONException e) {
e.printStackTrace();
}
}
out.writeBytes(o.toString()); //写入流
}
};
Request request = new Request.Builder().url(myurl)
.addHeader("Accept", "application/json; q=0.5")
.addHeader("Content-Type", "application/json; charset=UTF-8")
.post(requestBody)
.build();
response = mOkHttpClient.newCall(request).execute();
if(response.code()==200){
result = response.body().string();
System.out.println("========="+result+"=================");
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
其实现在看来也没什么,就普通的方法而已,哈,希望我的博客能帮到你哈。