Android使用Okhttp发送请求

一.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"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值