Android onActivityResult()和data.getStringExtra()出现问题,给出java.lang.NullPointerException:

Android onActivityResult()和data.getStringExtra()出现问题,给出java.lang.NullPointerException:,android,Android,我一直在尝试让它工作,以便在不重新启动的情况下将信息传递回主活动 应用程序在返回到父活动时崩溃,并出现以下错误: java.lang.RuntimeException:传递结果失败 ResultInfo{who=null,request=1,result=1,data=Intent{(有附加项) }}到活动{…CustomerMapActivity}: java.lang.NullPointerException:尝试调用虚拟方法“void” 空值上的android.widget.TextVie

我一直在尝试让它工作,以便在不重新启动的情况下将信息传递回主活动

应用程序在返回到父活动时崩溃,并出现以下错误:

java.lang.RuntimeException:传递结果失败 ResultInfo{who=null,request=1,result=1,data=Intent{(有附加项) }}到活动{…CustomerMapActivity}: java.lang.NullPointerException:尝试调用虚拟方法“void” 空值上的android.widget.TextView.setText(java.lang.CharSequence)“” 对象引用

还表明:

原因:java.lang.NullPointerException:尝试调用虚拟机 方法'void android.widget.TextView.setText(java.lang.CharSequence)' 关于空对象引用 在

这是父代码中的哪一行:

mDateSelected.setText(mDate);
这是我的家长活动的代码:

  • 启动子活动的按钮

    mSelectPickupTime.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            Intent intent = new Intent(CustomerMapActivity.this, DateCalendarActivity.class);
            startActivityForResult(intent, 1);
    
        }
    });
    
  • 从子活动接收结果的函数

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if (requestCode == 1) {
            if (resultCode == RESULT_OK) {
                if (data != null) {
                    mDate = data.getStringExtra("date");
                    mDateSelected.setText(mDate);
                    mTime = data.getStringExtra("time");
                    mTimeSelected.setText(mTime);
                } else {
                    Log.d("TAG_MA", "data is null");
                }
            }
            if (resultCode == RESULT_CANCELED) {
                mSelectPickupTime.setText("Please choose time and date");
            }
        }
    }
    
  • 子活动的代码如下所示:

    public class DateCalendarActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener {
    private TextView mDateSelected, mTimeSelected;
    private Button mSelectTime, mConfirmDateAndTime;
    private CalendarView mCalendarView;
    private String mDate, mTime;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_date_calendar);
    
    
        mDateSelected = (TextView) findViewById(R.id.dateSelected);
        mTimeSelected = (TextView) findViewById(R.id.timeSelected);
        mSelectTime = (Button) findViewById(R.id.selectTime);
        mConfirmDateAndTime = (Button) findViewById(R.id.confirmDateAndTime);
        mCalendarView = (CalendarView) findViewById(R.id.calendarView);
    
        mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(CalendarView calendarView, int i, int i1, int i2) {
                mDate = i + "/" + i1 + "/" + i2;
                mDateSelected.setText(mDate);
    
            }
        });
    
        mSelectTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogFragment timePicker = new TimePickerFragment();
                timePicker.show(getSupportFragmentManager(), "time picker");
    
            }
        });
    
    
        mConfirmDateAndTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent resultIntent = new Intent();
                resultIntent.putExtra("date", mDate);
                resultIntent.putExtra("time", mTime);
    
                setResult(RESULT_OK, resultIntent);
                finish();
    
            }
        });
    
    }
    
    @Override
    public void onTimeSet(TimePicker timePicker, int i, int i1) {
        //pick a time
        mTime = i + ":" + i1;
        //set time
        mTimeSelected.setText(mTime);
    }
    }
    

    无法找出发生这种情况的原因。非常感谢您的帮助。

    问题似乎出在textview中。初始化是如何给您带来问题的。您的mDateSelected为空。因此,请正确检查初始化。请在调用startActivityForResult(intent,1)之前确认所选MDATE的id在CustomerPactivity中,并执行初始化行

    mDateSelected
    为空,它表示。您从未在
    CustomerMapActivity
    中初始化
    mDateSelected
    。同时发布
    CustomerMapActivity
    代码以明确说明。您是否在
    CustomerMapActivity
    中声明了
    mDateSelected
    ?发布您的
    CustomerMapActivity
    的全部代码。是的,我的xml布局文件中有一个愚蠢的错误。谢谢你给我指出这个问题。请接受我的答案并投票表决。