Несогласованный ответ двух разных startActivityForResult из AppCompatActivity

У меня есть class, который расширяет AppCompatActivity. В рамках этого действия я делаю два разных вызова двух методов startActivityForResult, которые привязаны к двум прослушивателям кнопок. Первый вызывает намерение камеры следующим образом:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);

а второй вызывает другой AppCompatActivity, который содержит Google Map, а именно:

Intent getLatLongIntent = new Intent(Form.this, MapsLatLongActivity.class);
startActivityForResult(getLatLongIntent, LATLONG_REQUEST);

Первый startActivityForResult работает нормально, и я могу манипулировать ответом от намерения камеры в методе onActivityResult. Что вызывает недоумение, так это то, что тот же onActivityResult не срабатывает, когда я закрываю дочернюю активность второго вызова, используя этот код:

Intent intent = new Intent();
intent.putExtra("brdgHouseLat", latitude);
intent.putExtra("brdgHouseLong", longitude);
setResult(RESULT_OK, intent);
finish();

Ниже приведен мой код для метода onActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        himgres.setImageBitmap(photo);
    } else if (requestCode == LATLONG_REQUEST && resultCode == Activity.RESULT_OK) {
        latitude = data.getDoubleExtra("brdgHouseLat", 0);
        longitude = data.getDoubleExtra("brdgHouseLong", 0);
        Log.v(TAG, "and form has a lat = " + latitude);
        Log.v(TAG, "and a long = " + longitude);
    }
}

Излишне говорить, что я искал решения по этому поводу и проверил свой манифест (я не устанавливал никаких флагов); фрагменты (здесь фрагментов нет) и т. д.

Я начинаю думать, что, возможно, SharedPreferences будет лучшим вариантом, но я просто озадачен непоследовательностью ответов. Любая помощь будет оценена

================================================== ======================= Вот три метода второго действия, относящиеся к этому вопросу:

@Override
public void onBackPressed() {
    super.onBackPressed();
    packLatLong();
}

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
        case android.R.id.home: {
            packLatLong();
        }
    }
    return (super.onOptionsItemSelected(menuItem));
}

private void packLatLong() {
    if (latitude != 0 && longitude != 0) {
        Log.v(TAG, "packing this lat = " + latitude);
        Log.v(TAG, "packing this long = " + longitude);
        Intent intent = new Intent();
        intent.putExtra("brdgHouseLat", latitude);
        intent.putExtra("brdgHouseLong", longitude);
        setResult(RESULT_OK, intent);
        finish();
    }
}

Обратите внимание, что нажатие кнопки «Назад» или кнопки «Домой» на панели действий запускает метод packLatLong.


person Marka A    schedule 06.11.2017    source источник
comment
нам нужно увидеть полный код, чтобы проверить проблему, особенно активность, в которой вы создаете намерение для brdgHouseLat   -  person Pavneet_Singh    schedule 06.11.2017
comment
Спасибо @Pavneet_Singh, но я попытался включить все соответствующие коды для этого случая. Пожалуйста, дайте мне знать, какие еще коды нужны для меня, чтобы быть более ясным.   -  person Marka A    schedule 06.11.2017
comment
деятельности, где вы делаете intent.putExtra("brdgHouseLat", latitude);   -  person Pavneet_Singh    schedule 06.11.2017
comment
О, я называю это рефакторинговым методом. Здесь: private void packLatLong() { if (широта != 0 && долгота != 0) { Log.v(TAG, упаковка этой широты = + широта); Log.v(TAG, упаковывающий это long = + долгота); Намерение намерение = новое намерение(); намерение.putExtra (brdgHouseLat, широта); намерение.putExtra (brdgHouseLong, долгота); setResult(RESULT_OK, намерение); финиш(); } }   -  person Marka A    schedule 06.11.2017
comment
Извините, похоже, я не могу отформатировать это в комментарии ... Но да, это метод, который я где-то вызываю. И я убедился, что он тоже вызывается (для этого и нужны журналы).   -  person Marka A    schedule 06.11.2017
comment
вам нужно опубликовать полный код активности, отредактировав свой пост   -  person Pavneet_Singh    schedule 06.11.2017
comment
Привет @Pavneet_Singh, спасибо за помощь. Я добавил еще 3 метода, которые имеют отношение к этому вопросу. Полный код активности содержит другие методы, которые, как мне кажется, не имеют ничего общего с противоречивыми ответами onActivityResult.   -  person Marka A    schedule 06.11.2017
comment
вы нажимаете кнопку домой, чтобы вернуться?   -  person Pavneet_Singh    schedule 06.11.2017
comment
Давайте продолжим обсуждение в чате.   -  person Marka A    schedule 06.11.2017
comment
if (requestCode == LATLONG_REQUEST && resultCode == Activity.RESULT_OK)... Вы можете проверить это условие resultcode == Ok.   -  person Mohamed Mohaideen AH    schedule 06.11.2017
comment
Это совсем не так, @MohamedMohaideenAH, поскольку сам onActivityResult не запускается. Все остальные условия, указанные ниже, не действуют.   -  person Marka A    schedule 06.11.2017
comment
Если onActivityResult не срабатывает. Проверьте, верно ли это условие. if (широта != 0 && долгота != 0) { во втором действии.   -  person Mohamed Mohaideen AH    schedule 06.11.2017


Ответы (1)


В итоге я решил эту проблему с помощью нескольких советов от @Pavneet_Singh:

Вот решение:

В методе:

@Override
public void onBackPressed() {
    super.onBackPressed();
    packLatLong();
}

удалите вызов super, так как он всегда возвращает RESULT_CANCEL, даже если вы установите для него значение RESULT_OK.

Этот ответ помог мне в этом - https://stackoverflow.com/a/35241952/1637525.

я тоже поменял

setResult(RESULT_OK, intent);

to

setResult(Activity.RESULT_OK, intent);
person Marka A    schedule 06.11.2017