ActivityResultLauncher равен нулю

#java #android

Вопрос:

Поскольку startActivityForResult() теперь он устарел, вот как я пытаюсь получить результат своего намерения:

 public class Stt extends MainActivity {  private TextView _dialogText;   ActivityResultLauncherlt;Intentgt; activityResultLauncher = registerForActivityResult(  new ActivityResultContracts.StartActivityForResult(),  new ActivityResultCallbacklt;ActivityResultgt;() {  @Override  public void onActivityResult(ActivityResult result) {  if (result.getResultCode() == Activity.RESULT_OK) {  Intent data = result.getData();  // do something with data  }  }  });    public Stt(View targetView, Context context) {  _dialogText = targetView.findViewById(R.id.dialog_text);  ImageView dialogSst = targetView.findViewById(R.id.dialog_sst);   dialogSst.setOnClickListener(_view -gt; {  Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);   intent.putExtra(RecognizerIntent.ACTION_RECOGNIZE_SPEECH, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);  intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say something ...");  intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());   activityResultLauncher.launch(intent);  });   } }  

Так что, должно быть, что-то не так, activityResultLauncher.launch(intent); так как я получаю эту ошибку:

java.lang.Исключение NullPointerException: Попытка вызвать виртуальный метод «android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread ()» для ссылки на нулевой объект

Что не так с моим кодом?

Комментарии:

1. Похоже, вы пропускаете большую часть своей деятельности. Где вы настраиваете свой пользовательский интерфейс? Если ответ заключается в том, что где-то вы вызываете new Stt() , чтобы создать экземпляр этого класса, это не сработает. Этот код должен использовать реальное действие, с которого начинается startActivity() .

2. @CommonsWare из MainActivity я показываю диалоговое окно (класс, который расширяется DialogFragment ), и из этого класса я звоню new Stt() . Причина, по которой я создал класс Stt , заключается в том, что я буду использовать это намерение в своем диалоговом окне, а также в основной деятельности. Поэтому я не хочу писать один и тот же код дважды.

3. «Я буду использовать это намерение в своем диалоге» — я не знаю, практично ли это. Как бы то ни было, ваш нынешний подход не сработает. Возможно, вы могли бы написать Stt , чтобы использовать an Activity в качестве параметра конструктора, и использовать его для всех вещей, для которых вам нужен an Activity .