我正在使用mockwebserver编写一个测试套件。我从官方 github 页面输入了所有依赖项。每次我尝试运行我收到的测试Unresolved reference: mockwebserver
没有导入选项。进口时的字体不是红色的。Android Studio 不提示任何内容。除了与未解析的引用相关的错误之外,没有其他错误。
构建.gradle
plugins {
id 'com.android.application'
id 'kotlin-android'
id("org.jetbrains.kotlin.android.extensions")
}
android {
compileSdk 31
useLibrary("android.test.runner")
useLibrary("android.test.base")
useLibrary("android.test.mock")
defaultConfig {
applicationId "com.example.moviespotter"
minSdk 21
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
buildFeatures {
viewBinding = true
compose true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
composeOptions {
kotlinCompilerExtensionVersion compose_version
kotlinCompilerVersion '1.5.21' …Run Code Online (Sandbox Code Playgroud) OkHttp 2.0.0-RC1使用Dispatcher中ThreadPoolExecutor定义的:#getExecutorService
executorService = new ThreadPoolExecutor(
0, Integer.MAX_VALUE,
60, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(),
Util.threadFactory("OkHttp Dispatcher", false));`
Run Code Online (Sandbox Code Playgroud)
这基本上是实现的Executors#newFixedThreadPool.
另一方面,Executors.newCachedThreadPool在平台#defaultHttpExecutor中定义的Retrofit使用归结为:
executorService = new ThreadPoolExecutor(
0, Integer.MAX_VALUE,
60, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(),
someThreadFactory);
Run Code Online (Sandbox Code Playgroud)
任何人都有任何想法为什么OkHttp使用Executors#newFixedThreadPool和改造Executors#newCachedThreadPool?
我正在 android studio 中开发一个 gcm 聊天应用程序,但我收到此错误,不知道如何解决。我搜索了它,但没有找到任何东西。这是代码,在 MainActivity.java 中也有同样的问题。
package com.example.jason.androidchat2;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.squareup.okhttp.OkHttpClient;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class ChatActivity extends Activity {
EditText editText_mail_id;
EditText editText_chat_message; …Run Code Online (Sandbox Code Playgroud) 因此,我的应用程序的一部分使用IntentService将大量(~1600)图像下载到SdCard.我以前使用过Glide,但现在想切换到OkHttp,因为它似乎更快,耗电更少.这是我目前的代码:
for (int i = 1; i < 1600; i++) {
try {
Request request = new Request.Builder()
.url(imageUrls[i])
.build();
Response response = client.newCall(request).execute();
File testDirectory = new File(Environment.getExternalStorageDirectory()
+ "/downloadTest");
if (!testDirectory.exists())
testDirectory.mkdirs();
OutputStream outputStream = new FileOutputStream(new File(testDirectory,
"testImage" + i + ".png"));
InputStream inputStream = response.body().byteStream();
byte[] buffer = new byte[1024];
int read;
while ((read = inputStream.read(buffer, 0, buffer.length)) >= 0)
outputStream.write(buffer, 0, read);
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以优化这段代码,使下载速度更快?
我遇到过类似的问题,这表明同样的问题。但是,就我而言,它似乎以不同的方式发生,不应产生如下所述的问题:
想象一下,我有两个内部私有库,发布在私有 Maven 存储库上,命名如下:
com.x.y.analytics
com.x.y.player
Run Code Online (Sandbox Code Playgroud)
这两个库都使用 OkHttp 3.6.0 和下面给定的代码片段:
provided 'com.squareup.okhttp3:okhttp:3.6.0'
Run Code Online (Sandbox Code Playgroud)
所以基本上,当我向 maven 发布 aar 时,我不包含实际的库,我编译它并将其提供给父项目中提到的库,代码片段如下:
compile 'com.squareup.okhttp3:okhttp:3.6.0'
Run Code Online (Sandbox Code Playgroud)
但是,即使由于这个库只有 1 个编译版本,一切都应该没问题,但我有下面给出的错误:
错误:任务 ':application:transformClassesWithJarMergingForDebug' 执行失败。
com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:okhttp3/Address.class
我相信如果我使用 compile 将库注入到私有库中会发生这个问题,但是由于我使用了提供的,如果有任何修复的线索,你能详细说明这个问题吗?
PS:OkHttp 的 GitHub 项目也有一个 issue,可以在这里找到。
使用时OkHttp,网络请求的执行方式1如下2:
val response = client.newCall(request).execute() // (1)
if (response.isSuccessful) {
val bs = response.body().byteStream() // (2)
val bitmap = BitmapFactory.decodeStream(bs)
} else { ... }
Run Code Online (Sandbox Code Playgroud)
我一直以为我是在 被处决的(1),在这种情况下,询问响应是否成功是有意义的。但今天我决定实现这个官方配方来跟踪文件下载的进度。
然后我意识到,如果我删除了行 ( response.body().byteStream()),进度计数器根本不会移动。理论上,我们没有下载任何东西,除非我们下载了,否则success在这种情况下意味着什么。
如果这是一个虚拟问题,我很抱歉,我相信我在这里缺少一些关于网络的非常基本的东西,我想了解更多。我试图理解该Okio库的源代码,但它对我来说有点太复杂,我需要一些参考或指导。
我看到这个
但这是Java(Android)语言的链接。我想使用kotlin语言...`我正在使用OkHttp库
val client = OkHttpClient()
val time = client.connectTimeoutMillis() // it's get only methood but i looking for method for set Timeout
Run Code Online (Sandbox Code Playgroud)
我的麻烦是我找不到如何为Kotlin 设置连接超时和套接字超时。
我正在尝试使用 OkHttp3 通过 WiFi 发送一些数据。
我使用创建了一个客户端,
import okhttp3.OkHttpClient;
.....
public OkHttpClient client;
Run Code Online (Sandbox Code Playgroud)
单击按钮后我设置了 websocket,
private void start() {
Request request = new Request.Builder().url("ws://192.168.1.84:81/").build();
EchoWebSocketListener listener = new EchoWebSocketListener();
WebSocket ws = client.newWebSocket(request, listener);
client.dispatcher().executorService().shutdown();
}
Run Code Online (Sandbox Code Playgroud)
其中EchoWebSocketListener是 的扩展WebSocketListener,完整列表如下。
但我在运行时不断收到以下错误...
java.lang.NullPointerException: Attempt to invoke virtual method 'okhttp3.WebSocket okhttp3.OkHttpClient.newWebSocket(okhttp3.Request, okhttp3.WebSocketListener)' on a null object reference
Run Code Online (Sandbox Code Playgroud)
当追溯到 start() 函数中的行时,
WebSocket ws = client.newWebSocket(request, listener);
Run Code Online (Sandbox Code Playgroud)
怎么会client是null?
完整代码清单:
package qdivision.org.qrtracker;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View; …Run Code Online (Sandbox Code Playgroud) Retrofit 有 36 个打开的拉取请求和 147 个打开的错误,Okhttp 有 9 个打开的拉取请求和 161 个打开的错误。
我知道这个问题很伤人,而且我们都把 Retrofit 和 Okhttp 当作小孩子,但我需要问:
Retrofit和Okhttp被抛弃了吗?
我正在尝试从服务器获取 json 并将其放入我的 RecyclerView,但它说“java.lang.String 无法转换为 JSONArray”。我试图跟踪我的 json,但它什么也没显示。怎么了,我该如何解决这个问题?
private void Prosesdataserver(int id){
AsyncTask<Integer, Void, Void> task = new AsyncTask<Integer, Void, Void>() {
@Override
protected Void doInBackground(Integer... integers) {
OkHttpClient client = new OkHttpClient();
try{
RequestBody formBody = new FormBody.Builder().add("username_krm", username).add("password_krm", password).build();
Request request = new Request.Builder().url("http://" + urlpakai + "/utrapos/index.php/getpenawaran?id="+integers[0]).post(formBody).build();
response = client.newCall(request).execute();
ini = response.body().toString();
JSONArray array = new JSONArray(ini);
System.out.println("Saya Berkata: " + ini);
for(int i=0; i<array.length();i++){
JSONObject object = array.getJSONObject(i);
DataJson hasil = new DataJson(object.getInt("id"), object.getString("kode"), object.getString("tglpenawaran"), object.getString("nama"), …Run Code Online (Sandbox Code Playgroud) 我得到了关于活动结果的文件。或者我应该说它的内容 uri 版本。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK && requestCode==0){
Log.d("uri data",""+data.getData());
selectedFileUri = data.getData();
Run Code Online (Sandbox Code Playgroud)
我的问题是如何通过 okhttp3 方法发送这个文件?
okhttp 3 方法如下
multipart.addFilePart("data[User][user_picture]", selectedFileUri);
Run Code Online (Sandbox Code Playgroud)
感谢您的时间。
我明白了,但找不到在哪里添加?我还应该使用花括号{}之类的吗?
# OkHttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
Run Code Online (Sandbox Code Playgroud)
代码:
dependencies {
/*TODO:-> Android default libraries*/
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
/*TODO:-> For shows Database on Google Chrome*/
implementation 'com.facebook.stetho:stetho:1.5.0'
implementation('com.crashlytics.sdk.android:crashlytics:2.9.8@aar') {
transitive = true
}
/*TODO:-> For View binding*/
implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
/*TODO:-> Server side libraries*/
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation …Run Code Online (Sandbox Code Playgroud) 可以不使用例如ktorwithokhttp作为引擎,而是直接使用okhttp4它仅在 Kotlin 中构建吗?