有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓为什么需要安卓。appcompat。AppCompative可以抛出java。lang.NoSuchMethodError:没有虚拟方法getMainExecutor()?

我最近修改了我的应用程序以使用AndroidX库,我正在尝试使用AndroidX。生物特征。应用程序活动中的提示

然而,我得到了以下例外:

java.lang.NoSuchMethodError: No virtual method getMainExecutor()Ljava/util/concurrent/Executor

我尝试过使用应用程序上下文,但也没用

import 安卓x.biometric.BiometricPrompt;
import 安卓x.appcompat.app.AppCompatActivity;

class MainActivity extends AppCompatActivity {        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        final BiometricPrompt.PromptInfo info = new BiometricPrompt.PromptInfo.Builder()
            .setTitle("Login")
            .setSubtitle("Perform login with your fingerprint")
            .setNegativeButtonText("Cancel")
            .build();
        new BiometricPrompt(this, getMainExecutor(), onFingerprintAuthentication())
            .authenticate(info, getCryptoObject());
    }
}

这些是我正在导入的AndroidX库

implementation '安卓x.core:core:1.1.0-alpha03'
implementation '安卓x.appcompat:appcompat:1.1.0-alpha01'
implementation '安卓x.recyclerview:recyclerview:1.1.0-alpha01'
implementation '安卓x.cardview:cardview:1.0.0'
implementation '安卓x.annotation:annotation:1.0.1'
implementation '安卓x.mediarouter:mediarouter:1.1.0-alpha01'
implementation '安卓x.browser:browser:1.0.0'
implementation '安卓x.exifinterface:exifinterface:1.0.0'
implementation '安卓x.vectordrawable:vectordrawable:1.1.0-alpha01'
implementation '安卓x.constraintlayout:constraintlayout:2.0.0-alpha3'
implementation '安卓x.multidex:multidex:2.0.1'
implementation '安卓x.biometric:biometric:1.0.0-alpha03'

共 (1) 个答案

  1. # 1 楼答案

    正如@Michael在评论中提到的,可以使用

    ContextCompat.getMainExecutor(this);
    

    这解决了我的问题

    或者,如this答案中所述,也可以创建自己的执行器

    public class MainThreadExecutor implements Executor {
        private final Handler handler = new Handler(Looper.getMainLooper());
    
        @Override
        public void execute(@Nonnull Runnable runnable) {
            handler.post(runnable);
        }
    }