Намерение вернуть нулевое значение onActivityResult - PullRequest
2 голосов
/ 16 мая 2011

HI

У меня есть класс MainActivity, который расширяет класс DashboardActivity.В главном классе активности есть верхняя панель действий, которая при нажатии перейдет в класс AddReminderActivity.Действие верхней панели действий определено в классе активности Dashboard как

private void createReminder() {
    // TODO: fill in implementation
    Intent intent = new Intent(DashboardActivity.this,AddReminderActivity.class);
    Log.i("in OnActivityResult", "create reminder called");       
    startActivityForResult(intent, ACTIVITY_CREATE);
    Log.i("in OnActivityResult", "Start Activity called Result");       
}

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        Log.i("in OnActivityResult", "Activity Result" + resultCode);       
        super.onActivityResult(requestCode, resultCode, intent);
        Log.i("in OnActivityResult", "Activity Result" + resultCode);    
        Log.i("in OnActivityResult", "intent Result" + intent.getExtras());    
        Bundle extras = intent.getExtras();
        Toast.makeText(getApplicationContext(),resultCode, Toast.LENGTH_SHORT).show();
        switch(requestCode){
        case ACTIVITY_CREATE:
              if (resultCode == Activity.RESULT_OK) {
                String title = extras.getString(ReminderDBAdapter.KEY_REMINDER_TITLE);
                String content = extras.getString(ReminderDBAdapter.KEY_REMINDER_CONTENT);
                mDbHelper.createReminder(title, content);
                mDbHelper.close();
              }
        startActivity(new Intent(this,ListReminder.class));
            break;

        }
        // TODO: fill in rest of method

    }

В классе AddReminderActivityClass я вызвал

btnSubmitReminder.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Bundle bundle = new Bundle();

            bundle.putString(ReminderDBAdapter.KEY_REMINDER_TITLE, mReminderTitle.getText().toString());
            bundle.putString(ReminderDBAdapter.KEY_REMINDER_CONTENT, mReminderContent.getText().toString());
            if(mRowId != null){
                bundle.putLong(ReminderDBAdapter.KEY_ROWID, mRowId);
            }
            System.out.println(mReminderTitle.getText().toString());
            Toast.makeText(getApplicationContext(), mReminderTitle.getText().toString(), Toast.LENGTH_SHORT).show();
            Intent mIntent = new Intent();
            mIntent.putExtras(bundle);
            //setResult(RESULT_OK, mIntent);
            if (getParent() == null) {
                  setResult(DashboardActivity.RESULT_OK, mIntent);
            } else {
                getParent().setResult(DashboardActivity.RESULT_OK, mIntent);
            }

            Log.i("in OnActivityResult", "set result" +RESULT_OK);       
            finish();

        }
    });

Но при возврате в OnActivityResult намерение возвращает ноль и следующееисключение происходит.Я не могу распознать, в чем заключается проблема

05-16 17:25:09.686: ERROR/AndroidRuntime(441): FATAL

ИСКЛЮЧЕНИЕ: главное 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): java.lang.RuntimeException: ошибка доставки результата ResultInfo {who= null, request = 0, result = -1, data = Intent {(extras)}} для действия {com.babz.android.businessReminder / com.babz.android.businessReminder.MainActivity}: android.content.res.Ресурсы $ NotFoundException: строковый идентификатор ресурса # 0xffffffff 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): в android.app.ActivityThread.deliverResults (ActivityThread.java:3515) 05-16 17: 25: 09.686: ОШИБКА/ AndroidRuntime (441): в android.app.ActivityThread.handleSendResult (ActivityThread.java:3557) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): в android.app.ActivityThread.access $ 2800 (ActivityThread.java: 125) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2063) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): на android.os.Handler.dispatchMessage (Handler.java:99) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): на android.os.Looper.loop (Looper.java:123) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): вandroid.app.ActivityThread.main (ActivityThread.java:4627) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): в java.lang.reflect.Method.invokeNative (собственный метод) 05-16 17:25: 09.686: ОШИБКА / AndroidRuntime (441): в java.lang.reflect.Method.invoke (Method.java:521) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): at dalvik.system.NativeStart.main (собственный метод) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): вызвано: android.content.res.Resources $ NotFoundException: строковый идентификатор ресурса # 0xffffffff 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): в android.content.res.Resources.getText (Resources.java:201) 05-16 17:25: 09.686: ОШИБКА / AndroidRuntime (441): на android.widget.Toast.makeText (Toast.java:258) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): на com.babz.android.businessReminder.DashboardActivity.onActivityResult (DashboardActivity.java:68) 05-16 17: 25: 09.686: ОШИБКА / AndroidRuntime (441): в android.app.Activity.dispatchActivityResult (Activity.java:3890) 05-16 17: 25: 09.686: ОШИБКА/ AndroidRuntime (441): на android.app.ActivityThread.deliverResults (ActivityThread.java:3511)

Ответы [ 4 ]

1 голос
/ 26 апреля 2013

На самом деле проблема в этой строке:

Toast.makeText(getApplicationContext(),resultCode, Toast.LENGTH_SHORT).show();

Это вызывает исключение, поскольку параметр resultCode является int, и в этом случае метод makeText() предполагает, что значение является идентификатором ресурса (то есть: R.string.something). В этом случае, однако, значение равно -1, и это генерирует это:

android.content.res.Resources$NotFoundException: String resource ID #0xffffffff

Вы действительно надеялись вызвать метод makeText(), который вместо этого использует String. Попробуйте это:

Toast.makeText(getApplicationContext(),"ResultCode: " + resultCode,
                  Toast.LENGTH_SHORT).show();
1 голос
/ 19 мая 2011

Насколько я могу сказать, вы получаете исключение, когда вы пытаетесь получить значение с ключом, которого нет в комплекте, поэтому в вашем случае, вероятно, один из них:

String title = extras.getString(ReminderDBAdapter.KEY_REMINDER_TITLE);
String content = extras.getString(ReminderDBAdapter.KEY_REMINDER_CONTENT);

Вы можете спросить пакет, существует ли ключ, вызвав containsKey (String key) в пакете, поэтому я предлагаю вам использовать это, чтобы узнать, так ли это.

1 голос
/ 17 октября 2012

Как сказал Гуру, метод setResult () не вызывается.Таким образом, Intent никогда не устанавливается.

Я делаю отдельный ответ, потому что существует распространенная проблема, требующая решения: использование неправильно setResult ().

Убедитесь, что вы используете setResult (resultCode, intentData), а не setResult (resultCode).Я должен подчеркнуть, что во многих примерах во многих книгах используется последняя, ​​подразумевая, что то же самое намерение, которое было отправлено в Activity через startActivityForResult (), просто вернет тот же самый Намерение.ВСЕ ИНТЕНТЫ ДОЛЖНЫ быть добавлены напрямую, иначе вы получите NULL для Интента в onActivityResult () каждый раз.

1 голос
/ 16 мая 2011

Раскомментируйте вызов метода setResult.

...