android-studio - Android中使用Okhttp 报错

查看:200
本文介绍了android-studio - Android中使用Okhttp 报错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

08-15 17:37:52.810 18110-19166/cn.licoy.phonequery E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
                                                                     Process: cn.licoy.phonequery, PID: 18110
                                                                     java.lang.SecurityException: Permission denied (missing INTERNET permission?)
                                                                         at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:119)
                                                                         at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
                                                                         at java.net.InetAddress.getAllByName(InetAddress.java:752)
                                                                         at okhttp3.Dns$1.lookup(Dns.java:39)
                                                                         at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:172)
                                                                         at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.java:138)
                                                                         at okhttp3.internal.connection.RouteSelector.next(RouteSelector.java:80)
                                                                         at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:178)
                                                                         at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:129)
                                                                         at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:98)
                                                                         at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                         at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                         at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                         at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                         at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170)
                                                                         at okhttp3.RealCall.access$100(RealCall.java:33)
                                                                         at okhttp3.RealCall$AsyncCall.execute(RealCall.java:120)
                                                                         at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                         at java.lang.Thread.run(Thread.java:761)
                                                                      Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
                                                                         at libcore.io.Posix.android_getaddrinfo(Native Method)
                                                                         at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
                                                                         at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:106)
                                                                         at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74) 
                                                                         at java.net.InetAddress.getAllByName(InetAddress.java:752) 
                                                                         at okhttp3.Dns$1.lookup(Dns.java:39) 
                                                                         at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:172) 
                                                                         at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.java:138) 
                                                                         at okhttp3.internal.connection.RouteSelector.next(RouteSelector.java:80) 
                                                                         at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:178) 
                                                                         at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:129) 
                                                                         at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:98) 
                                                                         at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                                                         at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                                                         at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                                                         at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                                                         at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170) 
                                                                         at okhttp3.RealCall.access$100(RealCall.java:33) 
                                                                         at okhttp3.RealCall$AsyncCall.execute(RealCall.java:120) 
                                                                         at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                                                                         at java.lang.Thread.run(Thread.java:761) 
                                                                      Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
                                                                         at libcore.io.Posix.android_getaddrinfo(Native Method) 
                                                                         at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55) 
                                                                         at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:106) 
                                                                         at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74) 
                                                                         at java.net.InetAddress.getAllByName(InetAddress.java:752) 
                                                                         at okhttp3.Dns$1.lookup(Dns.java:39) 
                                                                         at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:172) 
                                                                         at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.java:138) 
                                                                         at okhttp3.internal.connection.RouteSelector.next(RouteSelector.java:80) 
                                                                         at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:178) 
                                                                         at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:129) 
                                                                         at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:98) 
                                                                         at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                                                         at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                                                         at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                                                         at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                                                         at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170) 
                                                                         at okhttp3.RealCall.access$100(RealCall.java:33) 
                                                                         at okhttp3.RealCall$AsyncCall.execute(RealCall.java:120) 
                                                                         at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                                                                         at java.lang.Thread.run(Thread.java:761) 

这是错误信息
以下是我请求的代码


import android.os.Debug;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by Administrator on 2017/8/15.
 */

/**
 * HTTP请求工具
 */
public class HttpUnit {

    private String http_request_url;
    private Map<String,String> http_request_param;
    private final OkHttpClient okHttpClient = new OkHttpClient();
    private Response response;

    /**
     * GET请求
     * @param url 请求地址
     * @param param 请求参数
     */
    public void get(String url, Map<String,String> param){
        send(url,param,false);
    }

    /**
     * POST请求
     * @param url 请求地址
     * @param param 请求参数
     */
    public void post(String url, Map<String,String> param){
        send(url,param,true);
    }

    /**
     * 发送请求
     * @param url 请求地址
     * @param param 请求参数
     * @param post 是否post请求
     */
    private void send(String url, Map<String,String> param,boolean post){
        http_request_url = url;
        http_request_param = param;
        run(post);
    }

    /**
     * 执行请求
     * @param post 是否post请求
     */
    private void run(boolean post){
        Request request = getRequest(post);
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                z(response);
            }
        });
    }


    private void z(Response response){
        this.response = response;
    }


    /**
     * 获取Request请求实例
     * @param post 是否post请求
     * @return Request
     */
    private Request getRequest(boolean post){
        Request request = null;
        if(post){
            MultipartBody.Builder builder = new MultipartBody.Builder();
            builder.setType(MultipartBody.FORM);
            for (Map.Entry<String, String> map : http_request_param.entrySet()) {
                builder.addFormDataPart(map.getKey(), map.getValue());
            }
            request = new Request.Builder().url(http_request_url)
                    .post(builder.build()).build();
        }else{
            String url = http_request_url+"?"+mapParam();
            //Log.e("####url",url);
            request = new Request.Builder().url(url).build();
        }
        return request;
    }

    /**
     * 拼接GET参数
     * @return String
     */
    private String mapParam(){
        StringBuilder stringBuilder = new StringBuilder();
        for (Map.Entry<String, String> map : http_request_param.entrySet()) {
            stringBuilder.append(map.getKey()).append("=").append(map.getValue()).append("&");
        }
        String re = null;
        if(!"".equals(stringBuilder.toString())){
            re = stringBuilder.substring(0,stringBuilder.length()-1);
        }
        return  re;
    }


    public Response getResponse() {
        return response;
    }
}

请问错误出现在哪儿了?

解决方案

没有权限

java.lang.SecurityException: Permission denied (missing INTERNET permission?)

在manifest加上权限

<uses-permission android:name="android.permission.INTERNET" />

这篇关于android-studio - Android中使用Okhttp 报错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆