当前位置: 首页 > 面试题库 >

Android HTTP与OkHttp连接不起作用

长孙作人
2023-03-14
问题内容

我正在尝试使用OkHttp,但是它一直崩溃。有人可以快速浏览一下,看看是否知道发生了什么事。谢谢。

日志猫:

01-24 08:34:46.952: E/AndroidRuntime(31953): FATAL EXCEPTION: OkHttp Dispatcher
01-24 08:34:46.952: E/AndroidRuntime(31953): java.lang.NoClassDefFoundError: okio.Okio
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.http.HttpConnection.<init>(HttpConnection.java:87)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Connection.upgradeToTls(Connection.java:272)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Connection.connect(Connection.java:158)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:174)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:120)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:131)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:312)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:235)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call.getResponse(Call.java:262)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:219)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:192)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call.access$100(Call.java:34)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:156)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at java.lang.Thread.run(Thread.java:841)

这是我尝试使用的代码示例。它来自在线教程(teamtreehouse.com)Java代码:

OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(forecastUrl)
                    .build();

            Call call = client.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Request request, IOException e) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            toggleRefresh();
                        }
                    });
                    alertUserAboutError();
                }

                @Override
                public void onResponse(Response response) throws IOException {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            toggleRefresh();
                        }
                    });

                    try {
                        String jsonData = response.body().string();
                        Log.v(TAG, jsonData);
                        if (response.isSuccessful()) {
                            mCurrentWeather = getCurrentDetails(jsonData);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    updateDisplay();
                                }
                            });
                        } else {
                            alertUserAboutError();
                        }
                    }
                    catch (IOException e) {
                        Log.e(TAG, "Exception caught: ", e);
                    }
                    catch (JSONException e) {
                        Log.e(TAG, "Exception caught: ", e);
                    }
                }
            });

问题答案:

OkHttp需要Okio,OkHttp可以使用Okio来实现快速I /
O和可调整大小的缓冲区。您可以在此处下载Okio(最新的JAR)。

要么

Android gradle: compile 'com.squareup.okio:okio:1.6.0'

马文

<dependency>
    <groupId>com.squareup.okio</groupId>
    <artifactId>okio</artifactId>
    <version>1.6.0</version>
</dependency>

用于版本检查;github okio



 类似资料:
  • 在请求完成后,应该如何告诉OkHttp关闭与HTTP服务器的连接? 假设我使用以下代码向google发出请求。通用域名格式 通过使用“连接:关闭”,我能够让远程服务器发送FIN(如果我不这样做,远程服务器只是挂起等待新请求)。尽管如此,在客户端没有产生FIN,并且连接保持半打开显然有一段不确定的时间。

  • 我正在使用OkHttp 3.5.0执行超文本传输协议-基准测试。我正在向同一个URL发送数千个请求。 我期望OkHttp-client使用ConnectionPool并一遍又一遍地重用它的连接。但是如果我们研究,我们会看到许多连接处于TIME_WAIT状态: 在数千个请求之后,我得到了一个

  • 我正在尝试使用Apache Flink流API加入两个流,但没有任何内容加入,并且在阅读文档后我不知道我做错了什么 关键功能是

  • 我正在使用LocalHost运行Glassfish服务器4.1版和Netbeans。我在2台装有Windows10的计算机上这样做。我在一台电脑上安装了一个全新的、干净的Windows10版本。该计算机上的connectionpool无法工作。在另一台计算机上,它的工作状态和Linux(以前的操作系统)一样好。 在Netbeans中,我使用glassfis-fesources.xml文件开发了一个

  • 问题内容: 我正在尝试将PHPMyAdmin容器连接到MySQL容器以查看数据库。 我已经通过启动了MySQL容器 和PHPMyAdmin-Container通过 尝试登录PHPMyAdmin时,我得到:mysqli_real_connect():php_network_getaddresses:getaddrinfo失败:名称无法解析 和 mysqli_real_connect():( HY00

  • 我正在尝试按照一个简单的示例应用程序教程来创建一个Spring启动应用程序并将其连接到mysql数据库。使用智能诊断。https://www.youtube.com/watch?v=YVl6M5ztOu8 项目结构: 当我尝试运行此示例应用程序时,我收到以下错误消息: **运行该程序的步骤: 在称为“restfulapi”的 mysql 工作台中创建连接 参数是本地主机端口 3306 的 root