Метод onActivityResult () не получает никакого результата от действия B?

В действии A намерение отправки с некоторыми строковыми значениями:

public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

        case R.id.Changepin:{
            Intent i = new Intent(MainActivity.this,ChangePwd.class);
            i.putExtra("plain1", plaintext);
            i.putExtra("cipher1", ciphertext);
            startActivityForResult(i,100);
            //startActivity(i);
            //finish();
        }
        break;
        default:{
            Log.e("","onOptionsItemSelected() Unknown menu event.");
        }
        break;
        }
        return true;
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==100){
            if(resultCode==10){

            String ciphertext1 = data.getStringExtra("changedcipher");
            Toast.makeText(MainActivity.this, ciphertext1, Toast.LENGTH_LONG).show();
            Log.e("mainactivity", "" + ciphertext1);
    }
}
}

В действии B вызов setResult () с тем же кодом результата, что и метод onActivityResult () кода результата в действии A:

public void setNewPin(){
String ciphertext1=null;    Intent i = new Intent(ChangePwd.this,MainActivity.class);
try{
ciphertext1 = crypthelper.encrypt(plaintext);
}catch (Exception e) {
}
i.putExtra("changedcipher", ciphertext1);
setResult(10,i);
Toast.makeText(ChangePwd.this, ciphertext1, Toast.LENGTH_LONG).show();
finish();
}

person Arjun S    schedule 14.05.2014    source источник
comment
в моем приложении происходит сбой, и когда я отлаживаю свой код, управление не попадает в onActivityResult (), и происходит сбой кода.   -  person Arjun S    schedule 14.05.2014
comment
разместите свой логарифм здесь ....   -  person Priyank Patel    schedule 14.05.2014


Ответы (1)


Коды запросов, которые вы используете для обозначения вызова Activity B, здесь не соответствуют. Тот, который вы указали для начала действия Б, - 2.

startActivityForResult(i,2);

а затем в onActivityResult вы проверяете,

if(requestCode==100){ .. }

отсюда и проблема. Измените его на,

if(requestCode==2){ .. }

и он должен работать. :)

Редактировать -

Измените Intent i = new Intent(ChangePwd.this,MainActivity.class); на

Intent i = new Intent();
person Atul O Holic    schedule 14.05.2014
comment
извините, я редактирую свою проблему .. теперь код запроса и код результата такие же. но код вылетает :( - person Arjun S; 14.05.2014
comment
только showStatusIcon для неактивного InputConnection, например, исключение, отображаемое в logcat, когда я отлаживаю код - person Arjun S; 14.05.2014
comment
Получаете ли вы тост и журнал внутри своего метода ActivityResult? Вы можете опубликовать свой Logcat? - person Atul O Holic; 14.05.2014
comment
проблема в том, что я не получаю никаких тостов ни за одно из действий .... некоторая часть logcat ::: - person Arjun S; 14.05.2014
comment
05-14 16: 18: 35.433: I / ActivityManager (273): START {cmp = com.rimus.Secret_Keeper / .ChangePwd (имеет дополнения) u = 0} из pid 15382 05-14 16: 18: 57.883: W / IInputConnectionWrapper (15382): showStatusIcon при неактивном InputConnection - person Arjun S; 14.05.2014
comment
проблема, кажется, где-то еще. Можете ли вы опубликовать весь свой код и logcat? Также попробуйте добавлять журналы через каждые несколько шагов и отслеживать, где код идет не так. - person Atul O Holic; 14.05.2014
comment
Может ли Activity A получить намерение от Activity B и Activity C без методов setResult и onactivityResult ??? - person Arjun S; 14.05.2014
comment
Вам нужно будет использовать широковещательные приемники, чтобы уведомить Activity A. Вы пытались использовать фрагменты вместо большого количества Activity. Просто подумай об этом. - person Atul O Holic; 14.05.2014
comment
Хорошо ... хотя я понятия не имею об использовании широковещательных приемников, но, как вы говорите, я попробую ... спасибо - person Arjun S; 14.05.2014
comment
Добро пожаловать. Если вы можете объяснить, что именно вы пытаетесь сделать, я смогу получить ясное видение? Если хочешь сказать;) - person Atul O Holic; 14.05.2014
comment
На самом деле у меня есть три действия A, B, C .... я отправляю намерение с двумя строками от A до B и получаю результат на A, он приходит отлично, но когда я отправляю намерение с двумя строками от B до C, чем достигаются оба строковых значения на действии C, но когда я пытаюсь получить результат на B, это терпит неудачу. Хотя я отлаживаю свой код шаг за шагом, он работает плавно, пока не дойдет до метода setResult () и finish (); активность C, но в действии B метод onActivityresult () не вызывается. когда я увидел в logcat только одно исключение, например, выражение show showStatusIcon при неактивном входном соединении, я не знаю, почему это происходит .... - person Arjun S; 14.05.2014
comment
не могли бы вы предоставить мне любой образец кода широковещательного приемника или любую ссылку, которая может решить мою проблему? если хочешь предоставить;) - person Arjun S; 14.05.2014
comment
В вашем случае вам пригодятся фрагменты (тогда Broadcast Receiver вам не понадобится). Вот отличное видео для этого - androidpit.com/forum/550923/ - person Atul O Holic; 14.05.2014
comment
спасибо за вашу помощь, Атул О Холич :), но я не хочу усложнять свою задачу. Я просто хочу получить данные обратно в свою активность b от c через метод onActivityResult, который не работает должным образом. - person Arjun S; 15.05.2014
comment
да, конечно. Поэтому я также упомянул о вещательном приемнике. :) - person Atul O Holic; 15.05.2014
comment
хорошо .... но это не большая задача, поэтому я спрашиваю, есть ли возможность в методе onactivityresult ?? - person Arjun S; 15.05.2014
comment
onActivityResult работает для одного действия - прямого действия, которое вы вызываете. Таким образом, если вы вызываете B из A, вы можете отправлять результаты обратно в A ТОЛЬКО из B. - person Atul O Holic; 15.05.2014
comment
Альтернативой может быть сохранение данных из Activity C в общем предпочтении, а затем их чтение из Activity A. Общие предпочтения являются динамическими и вступают в силу немедленно. Но это принимает данные только в виде строк и в паре значений ключа, например Maps. - person Atul O Holic; 15.05.2014
comment
да, правильно .... данные, поступающие от C к B, должны быть сохранены в общих настройках на B, чтобы я мог их использовать .... следовательно, в действии B я сделал следующее: @Override SharedPreferences preferences = preferenceManager.getDefaultSharedPreferences (this); SharedPreferences.Editor editor = preferences.edit (); editor.putString (cipher1, ciphertext1); editor.commit (); но проблема в том, что метод onactivityresult не вызывает ... :( - person Arjun S; 15.05.2014
comment
эй .. atul моя проблема решена :) я использую i.setFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP); для отправки намерения из Activity C в A и его получения ... теперь я получил данные о A и сохранил их в общих настройках - person Arjun S; 20.05.2014
comment
поздравляю. :) приятно слышать. :) Примите и проголосуйте за мой ответ, если я вам помог. :) - person Atul O Holic; 20.05.2014