okhttp自定义DNS、监听返回键

禁止横屏


//BaseActivity
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  //menifest
  android:screenOrientation="portrait"
  

监听软键盘回车键


 editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEND
                        || actionId == EditorInfo.IME_ACTION_DONE
                        || (event != null && KeyEvent.KEYCODE_ENTER == event.getKeyCode() && KeyEvent.ACTION_DOWN == event.getAction())) {
                    //处理事件
                    
                }
                return false;
            }
        });
        

okhttp自定义DNS


public class ApiDns implements Dns {
    @Override
    public List<InetAddress> lookup(String hostname) throws UnknownHostException {
        if (hostname == null) {
            throw new UnknownHostException("hostname == null");
        } else {
            try {
                List<InetAddress> mInetAddressesList = new ArrayList<>();
                InetAddress[] mInetAddresses = InetAddress.getAllByName(hostname);
                for (InetAddress address : mInetAddresses) {
                    if (address instanceof Inet4Address) {
                        mInetAddressesList.add(0, address);
                    } else {
                        mInetAddressesList.add(address);
                    }
                }
                return mInetAddressesList;
            } catch (NullPointerException var4) {
                UnknownHostException unknownHostException = new UnknownHostException("Broken system behaviour");
                unknownHostException.initCause(var4);
                throw unknownHostException;
            }
        }
    }
}

调用自定义DNS

  private static OkHttpClient initClient() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        //声明日志类
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                AppLogUtil.printE(message);
            }
        });
        //设定日志级别
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        //延时
        builder.addInterceptor(httpLoggingInterceptor)
                //设置参数加密
                .addInterceptor(new HttpInterceptor())
                .connectTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                //调用DNS
                 .dns(new ApiDns());
        return builder.build();
    }

OKHTTP添加公参


public class HttpInterceptor implements Interceptor {
    //声明响应对象
    String time;
    private Response response;
    @Override
    public Response intercept(Chain chain) throws IOException {

        //获取原始的Requset请求
        Request originalRequest = chain.request();
        //获取请求的方法
        String method = originalRequest.method();
        //判断是GET请求还是POST请求
        if("GET".equals(method)){
       
            HttpUrl httpUrl = originalRequest.url()
                    .newBuilder()
                    .addQueryParameter("version","")
                    .addQueryParameter("package_name","")
                    .addQueryParameter("platform","")
                    .addQueryParameter("timestamp","")
                    .addQueryParameter("key","")
                    .build();
            //获取添加公共参数之后的requset对象
            Request request = new Request.Builder().url(httpUrl).build();
            //发送拼接完成后的请求
            response = chain.proceed(request);
//            String str = new String(response.body().bytes(),"utf-8");
//            //json解析将data数据单独提出来
//            UserBean userBean = new Gson().fromJson(str,UserBean.class);

        }else if("POST".equals(method)){
            RequestBody requestBody = originalRequest.body();
            if(requestBody instanceof FormBody){
                FormBody.Builder builder = new FormBody.Builder();
                FormBody originalFormBody = (FormBody) originalRequest.body();
                for (int i = 0; i < originalFormBody.size(); i++) {
                    builder.add(originalFormBody.name(i),originalFormBody.value(i));

                }
               
                builder.add("key","");
                builder.add("timestamp","");
                builder.add("version","");
                builder.add("package_name","");
                builder.add("platform","");


                FormBody formBody = builder.build();
                Request request = originalRequest.newBuilder().post(formBody).build();
                response = chain.proceed(request);

            }else{
                response = chain.proceed(originalRequest);
            }
        }
        return response;
    }
    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OkHttp是一个用于Android和Java应用程序的HTTP客户端库。当使用OkHttp进行网络请求时,它会自动解析主机名并将其转换为IP地址。这个过程被称为DNS解析。默认情况下,OkHttp使用系统默认的DNS解析器来解析主机名。 但是,你也可以使用自定义DNS解析器来替换系统默认的DNS解析器。这可以通过OkHttpDns接口实现。你只需要实现Dns接口并将其传递给OkHttpClient即可。 例如,你可以创建一个自定义DNS解析器,它将所有主机名解析为特定的IP地址: ``` public class CustomDns implements Dns { private static final InetAddress[] CUSTOM_IPS = new InetAddress[] { InetAddress.getByName("192.168.0.1"), InetAddress.getByName("192.168.0.2") }; @Override public List<InetAddress> lookup(String hostname) throws UnknownHostException { return Arrays.asList(CUSTOM_IPS); } } ``` 然后,你可以将这个自定义DNS解析器传递给OkHttpClient: ``` OkHttpClient client = new OkHttpClient.Builder() .dns(new CustomDns()) .build(); ``` 这样,在进行网络请求时,OkHttp将使用你自定义DNS解析器来解析主机名。 ### 回答2: OkHttp DNSOkHttp 框架中的一部分,用于处理网络请求时解析域名的功能。 在进行网络请求时,我们通常会使用域名来表示目标主机,如 "www.example.com"。然而,计算机网络通信实际上是通过 IP 地址进行的。因此,我们需要将域名解析为对应的 IP 地址,以便与服务器进行通信。 OkHttp DNS 提供了一种机制,可以自定义和配置域名解析的策略。它允许开发人员替换默认的 DNS 解析器,从而实现更高效、灵活的域名解析。 OkHttp 内置了一个默认的 DNS 解析器,它使用 Java 标准库中的 InetAddress 类来解析 IP 地址。然而,对于某些特定的场景和需求,我们可能需要使用其他的 DNS 解析器。 通过实现自定义Dns 接口,我们可以将其传递给 OkHttp,从而替换默认的 DNS 解析器。我们可以自己实现域名解析的逻辑,例如在本地缓存 IP 地址、使用其他第三方 DNS 解析库等。这样可以提高解析效率、减少网络请求的延迟。 在使用 OkHttp DNS 时,我们可以通过 OkHttpClient.Builder 类的 dns() 方法来设置自定义DNS 解析器。例如: Dns customDns = new CustomDns(); OkHttpClient client = new OkHttpClient.Builder() .dns(customDns) .build(); 通过上述代码,我们将自定义DNS 解析器 customDns 设置为 OkHttpClient 的属性。在后续的网络请求中,OkHttp 将使用该解析器来解析域名。 总之,OkHttp DNS 提供了灵活、可定制的域名解析策略,可以满足不同场景下的需求,提升网络请求的性能。 ### 回答3: OkHttp是一个开源的轻量级的HTTP客户端库,主要用于Android平台。它提供了一组接口来发送和接收HTTP请求和响应数据,并且支持各种常见的HTTP协议和功能。 OkHttp DNSOkHttp库提供的一个功能,用于解析主机名(域名)并将其转换为IP地址。DNS(Domain Name System)是互联网中用于将域名转换为IP地址的系统,它允许我们使用域名来访问Web服务器,而不是直接使用IP地址。 OkHttp默认使用系统的DNS解析服务来解析主机名。但是,OkHttp也提供了自定义DNS功能,使我们可以根据需要修改或扩展DNS解析的过程。 通过使用OkHttp DNS,我们可以实现以下功能: 1. 自定义DNS解析:我们可以使用自定义DNS解析服务来解析主机名。这对于需要使用特定的DNS服务器或实现一些自定义逻辑的应用程序非常有用。 2. 域名解析优化:OkHttp DNS还可以实现域名解析的优化。例如,我们可以缓存最近解析的域名,以便下次访问时可以更快地获取IP地址。这可以提高应用程序的性能和响应速度。 3. DNS解析故障处理:如果默认的DNS解析服务发生故障或无法解析某个域名,我们可以使用OkHttp DNS来处理这些错误情况。例如,我们可以在DNS解析失败时使用备用的DNS服务器。 总之,OkHttp DNS是一个非常有用的功能,它可以让我们更灵活地处理主机名的解析,并提供更好的性能和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值