【问题标题】:Okhttp3 jar missing okio?Okhttp3 jar 缺少 okio?
【发布时间】:2021-12-27 07:57:51
【问题描述】:

我正在尝试制作一个简单的 Java 程序来上传一堆我必须要 imgur 的图像。但是我一个接一个地遇到问题,不能让 okhttp 正常工作。在这一点上,我试图解决这个问题所花费的时间比我编写程序本身所花费的时间要长得多。我对这种东西很陌生,所以请耐心等待。

所以,现在我有来自this tutorial 的以下代码:

RequestBody requestBody = new MultipartBody.Builder()
                .addFormDataPart("new", "This is my new TODO")
                .addFormDataPart("image", "attachment.png",
                        RequestBody.create(new File(""), MediaType.parse("image/png"))
                )
                .setType(MultipartBody.FORM)
                .build();

在 RequestBody.create() 部分出现错误:

The type okio.ByteString cannot be resolved. It is indirectly referenced from required .class files

当谷歌搜索此错误时,我发现 this page 说我缺少 okio 库。我认为这将包含在 okhttp jar 中。我还是下载了 okio jar 并将其添加到我的项目中,但错误并没有改变。我不知道还有什么问题。

【问题讨论】:

  • 版本很重要。您在这里使用这两个库的哪个版本?
  • 4.9.2 for okhttp 和 3.0.0 for okio

标签: java eclipse okhttp okio


【解决方案1】:

好的,我知道你的问题了。

3.0.0-Alpha-10 及以上的Okio 源代码已用Kotlin 重写。

您的代码需要 ByteString.class,为此您需要一个 Java .class。

使用这个版本https://repo1.maven.org/maven2/com/squareup/okio/okio/3.0.0-alpha.9/这个是用Java写的,在迁移到Kotlin之前。

下面的代码将编译:

package example;

import java.io.File;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;


public class OkHttpExample {

    public void example() {
        
        RequestBody requestBody = new MultipartBody.Builder()
                .addFormDataPart("new", "This is my new TODO")
                .addFormDataPart("image", "attachment.png",
                        RequestBody.create(new File(""), MediaType.parse("image/png"))
                )
                .setType(MultipartBody.FORM)
                .build();
    }
    
}

查看构建路径依赖项:

在你的构建路径中,你可以在eclipse中打开jar文件,查看内容:ByteString.class is included:

【讨论】:

  • 我正在使用 Eclipse,我在 /lib 文件夹中有两个库,并且它们都在我的类路径中。你说我需要让类路径和 IDE 都指向库,但我不确定让 IDE 指向库意味着什么。如果有帮助,我正在使用 okhttp3 4.9.2 和 okio 3.0.0。
  • @parakeet 您是否在 Eclipse 内部运行?还是从命令行?
  • 从 Eclipse 内部
  • 查看编辑 @parakeet Okio 从版本 3.0.0-Alpha-10 已被重构为使用 kotlin 而不是 Java。您需要使用更早的版本,Alpha-9 才能使用它。
  • 谢谢!起初它不起作用,我遇到了 kotlin 错误,所以我尝试将 okhttp 降级到 3.14.9 版本,然后才意识到这仍然是 okio 的问题,而不是 okhttp。 Okio 1.9.0 版适用于我。我自己也想不通,非常感谢您的帮助!
猜你喜欢
  • 2020-01-04
  • 2023-03-30
  • 2014-08-01
  • 2018-08-10
  • 2020-09-05
  • 2016-02-14
  • 2011-11-09
  • 2014-09-23
  • 2018-12-29
相关资源
最近更新 更多