Возврат результата из Activity с помощью Activity Result API не работает

Изучаю разработку в андроид. Нужно из первого Activity открыть второе Activity, получить в нем строку и по нажатию на кнопку вернуть строку в первое Activity.

Регистрация контракта в MainActivity:

ActivityResultLauncher<Intent> mStartCatEdt = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {
            long r = result.getResultCode();
            Log.d(TAG, "Result =  " + Long.toString(r));
            if (r == Activity.RESULT_OK) {
                Intent intent = result.getData();
                String s = intent.getStringExtra(MyClass.Rresult);
                Log.d(TAG, "Received: " + s.toString());
            } else {
                Log.d(TAG, "RESULT != OK");
                Intent intent = result.getData();
                String ss = intent.getStringExtra(MyClass.Rresult);
                Log.d(TAG, "RESULT != OK! SS = "+ss.toString());
            }
        }
    }
);

запуск второго активити:

public void newCtg(View view){
        Intent intent = new Intent(this, CategEdtActivity.class);
        intent.putExtra("id",0);
        intent.putExtra("name","Новая категория");
        mStartCatEdt.launch(intent);
    }

Во втором активити: обработчик нажатия кнопки

    private void Save(View view){
        String rr = "TEST STRING";
        Intent data = new Intent();
        data.putExtra(MyClass.Rresult,rr.toString());
        setResult(Activity.RESULT_OK);
        //setResult(Activity.RESULT_OK,data);
        //finish();
    }
public class MyClass {
    public static String Rresult = "Result";
}

Как это работает: второе активити открывается, показывает все что в него передалось. Но при нажатии на кнопку не происходит передачи Activity.RESULT_OK в первое активити. В Logcat вижу, что происходит вызов onActivityResult в первом активити, но result.getResultCode() возвращает 0, а не Activity.RESULT_OK. А последующий вызов intent.getStringExtra(MyClass.Rresult) приводит к аварийному завершению приложения. Вызов setResult(Activity.RESULT_OK,data) никак не меняет картины. Вызов finish() приводит к краху приложения. Подскажите пож-та, что делаю не так.


Ответы (0 шт):