一.Post发送json数据
1.导入包
//Okhttp3
implementation 'com.squareup.okhttp3:logging-interceptor:3.5.0'
//Gson工具类
implementation 'com.google.code.gson:gson:2.9.0'
//返回数据解析使用
implementation 'org.projectlombok:lombok:1.16.20'
2.封装请求类
public class Api {
private static String Request_Url;
private static String Request_Data;
public static Api api = new Api();
public static Api config(String url,String data) {
Request_Url=url;
Request_Data=data;
return api;
}
public void postFormBodyRequest(final TtitCallback callback) {
MediaType postrequestjsontype = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(postrequestjsontype,Request_Data);
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request
.Builder()
.addHeader("token","a") //加上token
.url("http://ip:9999"+Request_Url)
.post(body)
.build();
System.out.println(Request_Url);
System.out.println(Request_Data);
final Call call=okHttpClient.newCall(request);
//第五步发起请求
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("onFailure", e.getMessage());
callback.onFailure(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String result = response.body().string();
callback.onSuccess(result);
}
});
}
}
3.使用Api类,发送请求
Map<String,String> map=new HashMap<>();
map.put("name","admin");
map.put("pwd","123");
JSONObject jsonObject= new JSONObject(map);
Api.config("/user/login",jsonObject.toString()).postFormBodyRequest(new TtitCallback() {
@Override
public void onSuccess(String res) {
System.out.println(res);
}
@Override
public void onFailure(Exception e) {
System.out.println(e);
}
});
注意:可能会发生的错误
1. java.net.ConnectException: Failed to connect to localhost/127.0.0.1
连接本地web服务器,在模拟器不能连接到127.0.0.1。Android把127.0.0.1当作模拟器本机
把请求IP地址的localhost或者127.0.0.1改成本地的IP地址,例如:192.168.3.66
2.CLEARTEXT communication to " " not permitted by network security policy
在res下新建一个xml包,新建xml文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
接着在AndroidManifest.xml中如下写入:
<!--网络请求-->
<uses-permission android:name="android.permission.INTERNET" />
<application
<!--加入上面设置的xml设置-->
android:networkSecurityConfig="@xml/network_security_config"