Возврат результата из 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() приводит к краху приложения. Подскажите пож-та, что делаю не так.