Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Androidx.appcompat.AppCompatActivity抛出java.lang.NoSuchMethodError:没有虚拟方法getMainExecutor()?_Java_Android_Androidx - Fatal编程技术网

为什么Androidx.appcompat.AppCompatActivity抛出java.lang.NoSuchMethodError:没有虚拟方法getMainExecutor()?

为什么Androidx.appcompat.AppCompatActivity抛出java.lang.NoSuchMethodError:没有虚拟方法getMainExecutor()?,java,android,androidx,Java,Android,Androidx,我最近修改了我的应用程序以使用AndroidX库,并尝试在AppCompative活动中使用AndroidX.biometric.biometric提示符 但是,我得到以下例外情况: java.lang.NoSuchMethodError:没有虚拟方法getMainExecutor()Ljava/util/concurrent/Executor 我尝试过使用应用程序上下文,但也不起作用 import androidx.biometric.BiometricPrompt; import andro

我最近修改了我的应用程序以使用AndroidX库,并尝试在AppCompative活动中使用AndroidX.biometric.biometric提示符

但是,我得到以下例外情况:

java.lang.NoSuchMethodError:没有虚拟方法getMainExecutor()Ljava/util/concurrent/Executor

我尝试过使用应用程序上下文,但也不起作用

import androidx.biometric.BiometricPrompt;
import androidx.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 'androidx.core:core:1.1.0-alpha03'
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha01'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.annotation:annotation:1.0.1'
implementation 'androidx.mediarouter:mediarouter:1.1.0-alpha01'
implementation 'androidx.browser:browser:1.0.0'
implementation 'androidx.exifinterface:exifinterface:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0-alpha01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.biometric:biometric:1.0.0-alpha03'

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

ContextCompat.getMainExecutor(this);
这解决了我的问题

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

public class MainThreadExecutor implements Executor {
    private final Handler handler = new Handler(Looper.getMainLooper());

    @Override
    public void execute(@Nonnull Runnable runnable) {
        handler.post(runnable);
    }
}

getMainExecutor
已添加到API级别28的
上下文中。但是,
ContextCompat
androidx.core.content.ContextCompat
)有一个静态的
getMainExecutor
方法,您应该可以使用它。@Michael非常感谢您!这解决了我的问题。