如何将参数附加到 OkHttp Request.builder?
//request
Request.Builder requestBuilder = new Request.Builder()
.url(url);
Run Code Online (Sandbox Code Playgroud)
我已经管理了添加标头,但没有管理参数。
我有一个可以录制和上传视频文件的应用程序。我有一个记录onFailure Throwable每个文件上传的机制。
我注意到,在使用该应用程序的一千台设备中,有一些设备经常超时并且上传成功率很低。
有问题的设备是:Asus ZenPad C 7.0 Z170C
我已经购买了该设备并开始对其进行测试,但首先让您了解一下我使用的代码。
活动中:
FileUploadService service = ServiceGenerator.createService(FileUploadService.class);
File file = new File(getRealPathFromURI(mediaForUpload.mediaUri));
ProgressRequestBody fileBody = new ProgressRequestBody(file,
new ProgressRequestBody.UploadCallbacks() {
@Override
public void onProgressUpdate(int uploadPercentage) {
// set current progress
}
@Override
public void onError() {}
@Override
public void onFinish() {}
});
MultipartBody.Part body = MultipartBody.Part.createFormData(mediaForUpload.mediaNameWithExtension, mediaForUpload.mediaNameWithExtension, fileBody);
Call<ResponseBody> call = service.upload(body);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
if (response.isSuccessful()) {
} else {
//Log …Run Code Online (Sandbox Code Playgroud) 我正在研究一些 http 库,我必须修改一些库。研究的一部分是在闭源应用程序上测试它,所以我想知道是否有一种方法可以在没有应用程序源代码的情况下替换 APK 应用程序内的库。例如,某些应用程序使用 Okhttp3 库作为 http 客户端。我通过下载 Okhttp3 的源代码并将其编译为 jar 文件对 Okhttp3 进行了一些修改。现在我想知道是否可以使闭源应用程序的 APK 使用我修改后的 Okhttp3 版本,而不是应用程序 APK 中包含的官方 okhttp3。
我正在使用 Netbeans,并使用 Maven 创建了 java 项目。我添加了这个依赖项。
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>2.7.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
它有效,我可以导入 com.squareup.okhttp.*。在网上看到一些代码后,我意识到很多人都在使用 3+ 版本。我尝试将包更改为:
更新 我在问题“com.squareup.okhttp”中错误地输入了groupid,但在我的代码中它是正确的“com.squareup.okhttp3”。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.9.0</version>
Run Code Online (Sandbox Code Playgroud)
但我无法导入 com.squareup.okhttp3 (包 com.squareup 不存在)。为什么?我对 Java 语言本身以及支持它的所有 IDE 和工具都很陌生。
我正在尝试添加 Google DNS 查找,即“8.8.8.8”。在我的 Android 应用程序中,我将 Retrofit 与 OkHttp 一起使用。
可以通过编程实现吗?
我看到了这篇文章,但无法添加它dns-android-okhttp。
当我的系统使用 okhttp3 发送 http 请求时,会出现以下问题:413 Request Entity Too Large
我想知道如何在 okhttp3 请求中设置最大大小,或者是否有其他解决方案来解决此问题。
public static String post(String url, String json) throws IOException {
OkHttpClient client = new OkHttpClient().newBuilder()
.readTimeout(1, TimeUnit.MINUTES)
.build();
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.header("Authorization", authKey)
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
if(response.code() != 200) {
return "request error";
}
return response.body().string();
}
}
Run Code Online (Sandbox Code Playgroud) 我在通过 okhttp 响应解析字符串结果时遇到问题,我想解析该字符串,但我不知道如何做到这一点。\n有人可以帮助我吗?
\n我正在使用 android studio。
\npublic class MainActivity extends AppCompatActivity {\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0private TextView mTextViewResult;\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Override\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0protected void onCreate(Bundle savedInstanceState) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0super.onCreate(savedInstanceState);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0setContentView(R.layout.activity_main);\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0mTextViewResult = findViewById(R.id.text_view_result);\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0OkHttpClient client = new OkHttpClient();\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0String url = "https://reqres.in/api/users?page=2";\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0Request request = new Request.Builder()\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0.url(url)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0.build();\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0client.newCall(request).enqueue(new Callback() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Override\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0public void onFailure(Call call, IOException e) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0e.printStackTrace();\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Override\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0public void onResponse(Call call, Response response) throws IOException {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0if (response.isSuccessful()) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0final String myResponse = response.body().string();\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0MainActivity.this.runOnUiThread(new Runnable() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Override\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0public void run() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0mTextViewResult.setText(myResponse);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0});\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0});\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n}\nRun Code Online (Sandbox Code Playgroud)\n\nBlock quote\n[{"attributes": {"message": "以下是一些入门资源:\\n\\n -配置 Home Assistant \\n -可用组件\\n -对配置进行故障排除\\n -获取帮助\\n\\n为了将来不再看到此卡弹出窗口,请在 …
在我的 logcat 中,我在服务器调用期间有这样的行:
Rejecting re-init on previously-failed class java.lang.Class<okhttp3.internal.platform.ConscryptPlatform$platformTrustManager$2>: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/conscrypt/ConscryptHostnameVerifier;
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.conscrypt.ConscryptHostnameVerifier" on path: DexPathList[[zip file "/data/app/package-JHk9QBF7PSIufoXeKqbmNA==/base.apk"],nativeLibraryDirectories=[/data/app/package-JHk9QBF7PSIufoXeKqbmNA==/lib/x86, /system/lib, /system/vendor/lib]]
Run Code Online (Sandbox Code Playgroud)
一段时间后我可以看到这样的消息:
okhttp.OkHttpClient: <-- HTTP FAILED: java.net.SocketTimeoutException: timeout
Run Code Online (Sandbox Code Playgroud)
我检查了我的设备上的互联网运行良好。应用程序没有崩溃,但我无法发送任何请求。例如,这一周一切都运行良好,但现在却损坏了:(如何修复此错误?
我的 gradle 应用程序文件:
buildscript {
ext.kotlin_version = '1.3.71'
repositories { jcenter() }
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlinx-serialization'
apply plugin: 'com.google.gms.google-services'
android { …Run Code Online (Sandbox Code Playgroud) 我正在使用picasso + okhttp来加载和缓存图像.
目前这段代码正如我所料,并且缓存正如我所希望的那样工作.
Picasso.with(Context).load("http://images.com/image.png").into(ImageView);
Run Code Online (Sandbox Code Playgroud)
我想在初始同步时下载图像,所以我尝试了这段代码:
Picasso.with(Context).load("http://images.com/image.png");
Run Code Online (Sandbox Code Playgroud)
但它没有用.请求(来自okhttp lib)在函数中进入(ImageView).
如何缓存图像以便以后使用Picasso或okhttp?
谢谢
我正在尝试将OkHttp与Android Wear App一起使用.所有的互联网和所需的权限都在那里.
令人眼花缭乱的是,我发现我们无法直接从App上传递Web服务?我们必须使用Message和Data Api将数据从设备传递到磨损?
Webservice调用的任何其他方式?