我向我的项目添加了一个新的 Retrofit 接口,其中包含几个用@GET和注释注释的端点,在使用所述类的构造函数中的注释@HEADERS将所述接口注入到存储库类后,Android Studio 抛出此错误:@Inject
NonExistentClass cannot be converted to Annotation
Run Code Online (Sandbox Code Playgroud)
查看生成的 Java 代码后,它将@GET和@HEADERS注释替换为:
@error.NonExistentClass()
Run Code Online (Sandbox Code Playgroud)
我已经尝试过以下操作:
使用annotatioProcessor代替kapt
设置jetifier.enabled为false在gradle.properties
在我的文件generateStubs中设置truebuild.gradle
在我的文件correctErrorTypes中设置truebuild.gradle
我在用着:
安卓工作室3.3
科特林 1.3.11
匕首2.21
改造2.3.0
科特林
卡普特
可能是匕首范围的问题吗?或者Retrofit/dagger 与新版本的Kapt 插件不完全兼容?
当我涉及添加“摄像机预览”的部分时,我会这样做:
val previewConfig = PreviewConfig.Builder().apply {
setTargetAspectRatio(Rational(1, 1))
setTargetResolution(Size(640, 640))
setLensFacing(CameraX.LensFacing.BACK)
}.build()
val preview = Preview(previewConfig)
preview.setOnPreviewOutputUpdateListener { previewOutput ->
val parent = previewView.parent as ViewGroup
parent.removeView(previewView)
parent.addView(previewView, 0)
previewView.surfaceTexture = previewOutput.surfaceTexture
updateTransform()
}
CameraX.bindToLifecycle(this, preview)
Run Code Online (Sandbox Code Playgroud)
然后我得到以下错误:
java.lang.ExceptionInInitializerError
at androidx.camera.core.Preview.<clinit>(Preview.java:55)
at com.grow.vision.ImagePreviewActivity.startCamera(ImagePreviewActivity.kt:120)
at com.grow.vision.ImagePreviewActivity.access$startCamera(ImagePreviewActivity.kt:28)
at com.grow.vision.ImagePreviewActivity$onCreate$1.run(ImagePreviewActivity.kt:140)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7032)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
Caused by: java.lang.IllegalStateException: CameraX not initialized yet.
at androidx.camera.core.CameraX.getCameraDeviceSurfaceManager(CameraX.java:485)
at androidx.camera.core.CameraX.getSurfaceManager(CameraX.java:282)
at androidx.camera.core.Preview$Defaults.<clinit>(Preview.java:416)
at androidx.camera.core.Preview.<clinit>(Preview.java:55)
Run Code Online (Sandbox Code Playgroud)
似乎我需要以某种方式初始化CameraX,但是代码实验室或CameraX文档均未引用类似的内容。 …
我将我的应用程序项目拆分为其他模块,在实现 DI 并在模块之间拆分依赖项后,出现以下异常:
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/arch/core/util/Cancellable;
at androidx.activity.ComponentActivity.<init>(ComponentActivity.java:69)
at androidx.fragment.app.FragmentActivity.<init>(FragmentActivity.java:118)
at androidx.appcompat.app.AppCompatActivity.<init>(AppCompatActivity.java:77)
Run Code Online (Sandbox Code Playgroud)
然后,我检查ComponentActivity班级,是的,说班级找不到Cancellable班级。
package androidx.activity;
import static android.os.Build.VERSION.SDK_INT;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import androidx.annotation.CallSuper;
import androidx.annotation.ContentView;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.arch.core.util.Cancellable; // <---- This class can't be found!
import androidx.lifecycle.GenericLifecycleObserver;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;
import androidx.lifecycle.ReportFragment;
import androidx.lifecycle.ViewModelStore;
import androidx.lifecycle.ViewModelStoreOwner;
import androidx.savedstate.SavedStateRegistry;
import androidx.savedstate.SavedStateRegistryController;
import androidx.savedstate.SavedStateRegistryOwner;
import java.util.WeakHashMap;
/**
* Base class for activities that …Run Code Online (Sandbox Code Playgroud) 我对Java类中的方法有一个类似的逻辑(不是真正的代码,为了示例目的,这是简化的).
private Boolean method(Boolean booleanValue, SomeObject object) {
return booleanValue ? Arrays.asList(object.getStringsArray()).contains("string") : false;
}
Run Code Online (Sandbox Code Playgroud)
指派自己检查PR的合作者给出了以下评论:
这是低效的.它正在创建一个新的数据结构,只是迭代它并检查是否有某个字符串.
该getStringsArray()方法返回一个String[],所以使用for循环会比Arrays.asList()?
哪种方式更有效地实现这一目标?
我正在为我的应用程序编写单元测试,并且在写入时我发现了"减速带".在测试AndroidViewModel的子类时,我缺少用于初始化的Application参数.我已经读过这个使用Robolectric的问题了.
这是我到目前为止已经尝试过的:
我只是想实现我的AndroidViewModel类,所以我可以调用它们的公共方法,但是需要Application参数.我能为此做些什么?
fun someTest() {
val testViewModel = MyViewModelThatExtendsFromAndroidViewModel(**missing application parameter**)
testViewModel.foo() // The code never reaches here as the testViewModel cant be initializated
}
Run Code Online (Sandbox Code Playgroud)