Android:无法提供结果ResultInfo

时间:2012-03-22 14:49:30

标签: android android-intent

我在TabHost,A startActivityForResult(B)然后是B startActivityForResult(C)有一个活动A. 我遇到的问题是:
在C中,当我使用setResult(RESULT_OK,intent)时,发生

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { (has extras) }} to activity {com.hackingtrace.vancexu/com.hackingtrace.vancexu.task.B}: java.lang.NullPointerException

在B中,我从

开始
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();
        }
    });

然后在B中我收到

的结果
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:

if (getParent() == null) {
                setResult(Activity.RESULT_OK, intent);
            }
            else {
                getParent().setResult(Activity.RESULT_OK, intent);
            }

不工作:(
2:

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

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

2 个答案:

答案 0 :(得分:2)

在C中我把putExtra 2字符串(resultDate和time),但是我错过了在将intentDate置于意图时可能无法初始化的点。所以我得到了错误:java.lang.NullPointerException

答案 1 :(得分:1)

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

验证B是否被销毁可以做的一件事是在活动B的onCreate方法中放置一个Log语句。然后,当从B启动活动C时,通过按下硬件后退按钮退出C.这会破坏C(前提是你没有覆盖Back按钮),但除非B被破坏,否则它不会调用B onCreate