Android:未能提供结果信息

Android:未能提供结果信息,android,android-intent,Android,Android Intent,我在TabHost中有一个活动A,AstartActivityForResult(B)然后BstartActivityForResult(C) 我遇到的问题是: 在C中,当我设置RESULT(RESULT_OK,intent)时,出现 在B中,我从C开始 setTimeButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent

我在
TabHost
中有一个活动A,A
startActivityForResult(B)
然后B
startActivityForResult(C)

我遇到的问题是:
在C中,当我设置RESULT(RESULT_OK,intent)时,出现

在B中,我从C开始

setTimeButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent i = new Intent(view.getContext(), TaskTimeSet.class);
            i.putExtra(TasksDbAdapter.KEY_ROWID, mRowId);
            Calendar c = Calendar.getInstance();
            Date d = c.getTime();               
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String now = sdf.format(d);
            i.putExtra("date", now);

            startActivityForResult(i, ACTIVITY_EDIT_TIME);
        }
在C中,我将结果设置为

confirmBtn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent();
            intent.putExtra("date", resultDate);

            int h = timePicker.getCurrentHour();
            int m = timePicker.getCurrentMinute();
            String time = "" +h+":"+m;
            Log.d(TAG, time);
            intent.putExtra("time", time);

            setResult(RESULT_OK, intent);
            finish();
        }
    });
protected void onActivityResult(int requestCode, int resultCode,
        Intent intent) {
    Log.d(TAG, "I am in " + requestCode + resultCode);
    super.onActivityResult(requestCode, resultCode, intent);
    if (requestCode == ACTIVITY_EDIT_TIME) {
        if (resultCode == RESULT_OK) {
            Log.d(TAG, "OK time set");
            String[] dateArr = intent.getStringExtra("date").split("-");
            String[] timeArr = intent.getStringExtra("time").split(":");
            int year = Integer.parseInt(dateArr[0]);
            int month = Integer.parseInt(dateArr[1]);
            int day = Integer.parseInt(dateArr[2]);
            int hour = Integer.parseInt(timeArr[0]);
            int minute = Integer.parseInt(timeArr[1]);
            Log.d(TAG, ""+year+month+day+hour+minute);              
        }
    }
}
然后在B中,我通过

confirmBtn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent();
            intent.putExtra("date", resultDate);

            int h = timePicker.getCurrentHour();
            int m = timePicker.getCurrentMinute();
            String time = "" +h+":"+m;
            Log.d(TAG, time);
            intent.putExtra("time", time);

            setResult(RESULT_OK, intent);
            finish();
        }
    });
protected void onActivityResult(int requestCode, int resultCode,
        Intent intent) {
    Log.d(TAG, "I am in " + requestCode + resultCode);
    super.onActivityResult(requestCode, resultCode, intent);
    if (requestCode == ACTIVITY_EDIT_TIME) {
        if (resultCode == RESULT_OK) {
            Log.d(TAG, "OK time set");
            String[] dateArr = intent.getStringExtra("date").split("-");
            String[] timeArr = intent.getStringExtra("time").split(":");
            int year = Integer.parseInt(dateArr[0]);
            int month = Integer.parseInt(dateArr[1]);
            int day = Integer.parseInt(dateArr[2]);
            int hour = Integer.parseInt(timeArr[0]);
            int minute = Integer.parseInt(timeArr[1]);
            Log.d(TAG, ""+year+month+day+hour+minute);              
        }
    }
}
但是我从来没有得到“Log.d(TAG)”“+年+月+日+小时+分钟”;“正常运行”

我试过:
1:

不工作:(
2:


错误“java.lang.RuntimeException”未出现,但requestCode和resultCode始终为0。

在C返回之前,您的活动B似乎已被销毁。您可以检查的一件事是“开发工具”应用程序(它是大多数模拟器和设备上的应用程序图标之一,并且在冰淇淋三明治上标记为“开发人员选项”的设置中)确保未选中“不保留活动”选项


要验证B是否被销毁,您可以做的一件事是在活动B的
onCreate
方法中放入一条日志语句。然后,当活动C从B启动时,按硬件后退按钮退出C。这将销毁C(前提是您没有覆盖后退按钮),但除非B已被销毁,否则它不会调用B的
onCreate

看起来您的活动B在C返回之前已被销毁。您可以检查的一件事是“开发工具”应用程序(它是大多数模拟器和设备上的应用程序图标之一,并且在冰淇淋三明治上标记为“开发人员选项”的设置中),以确保“不保留活动”选项未选中


要验证B是否被销毁,您可以做的一件事是在活动B的
onCreate
方法中放入一条日志语句。然后,当活动C从B启动时,按硬件后退按钮退出C。这将销毁C(前提是您没有覆盖后退按钮),但它不会调用B的
onCreate
,除非B已被销毁。

在C中,我额外输入了2个字符串(resultDate和time),但我忽略了一点,即resultDate在放入intent时可能无法初始化。因此,我得到了错误:
java.lang.NullPointerException
在C中,我额外输入了2个字符串(resultDate和time),但我忽略了一点,即resultDate在投入使用时可能无法初始化。因此我得到了错误:
java.lang.NullPointerException

感谢您的帮助。是的,“它不会调用B的onCreate”。我已经证明了这一点。但我能做些什么来解决我的问题呢?我在emulator中找到了“开发工具”应用程序,但没有找到”“不要保留活动”选项在Android版本上,它可能会有不同的解读。在2.3.3中,它是“开发工具>开发设置>立即销毁活动”。确保未选中该选项。如果未调用
onCreate
,则不会销毁活动B。感谢您的观看,布莱恩。感谢您的帮助。是的,”它不会将B的onCreate称为“我已经证明了。但是我能做些什么来解决我的问题呢?我在emulator中找到了“开发工具”应用程序,但没有找到“不保留活动”选项。在Android版本上,它的读法可能不同。在2.3.3下,它是“开发工具>开发设置>”立即销毁活动“。确保未选中。如果未调用
onCreate
,则活动B不会被销毁。感谢您的观看,Brian。
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);