Почему Androidx.appcompat.AppCompatActivity выбрасывает java.lang.NoSuchMethodError: Нет виртуального метода getMainExecutor ()? - PullRequest
0 голосов
/ 04 января 2019

Недавно я изменил свое приложение для использования библиотек AndroidX, и я пытаюсь использовать androidx.biometric.BiometricPrompt в AppCompatActivity.

Однако я получаю следующее исключение:

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'

1 Ответ

0 голосов
/ 04 января 2019

Как отметил @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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...