Java 调用DatePickerDialog.getDatePicker()时出现NullPointerException
我正在使用Robotium测试我的项目。在测试中,当我调用datePickerDialog.getDatePicker()时,我总是得到一个NullPointerException My DatePickerDialogFragment代码:Java 调用DatePickerDialog.getDatePicker()时出现NullPointerException,java,android,robotium,Java,Android,Robotium,我正在使用Robotium测试我的项目。在测试中,当我调用datePickerDialog.getDatePicker()时,我总是得到一个NullPointerException My DatePickerDialogFragment代码: public class DatePicker_Fragment extends SherlockDialogFragment{ public static final int START_DATE = 1; public static f
public class DatePicker_Fragment extends SherlockDialogFragment{
public static final int START_DATE = 1;
public static final int END_DATE = 2;
public static final String TAG = "DatePicker";
private OnDateSetListener listener_m;
public DatePicker_Fragment(){
}
@SuppressLint("NewApi")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//get the current time
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
//create the dialog
DatePickerDialog datePickerDialog = new DatePickerDialog(getSherlockActivity(),listener_m,year, month, day);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
//datePickerDialog.getDatePicker().setSpinnersShown(false);
//datePickerDialog.getDatePicker().setCalendarViewShown(true);
}
return datePickerDialog;
}
public void setListener(OnDateSetListener listener){
listener_m = listener;
}
}
这是我测试中的相关代码
//Select the start date
TextView startDate = (TextView) solo.getView(R.id.tv_StartDate);
solo.clickOnView(startDate);
//wait for dialog fragment
solo.waitForFragmentByTag(DatePicker_Fragment.TAG);
//set the start date
SherlockFragmentActivity current_activity = (SherlockFragmentActivity) solo.getCurrentActivity();
DatePicker_Fragment dp_frag = (DatePicker_Fragment) current_activity.getSupportFragmentManager().findFragmentByTag(DatePicker_Fragment.TAG);
DatePickerDialog dp_dialog = (DatePickerDialog) dp_frag.getDialog();
DatePicker datePicker = dp_dialog.getDatePicker();
solo.setDatePicker(datePicker,2013,6,21);
solo.clickOnText("Set");
调用
dp\u dialog.getDatePicker()
时,我总是会收到一个NullPointerException。好吧,问题是我在片段显示之前就调用了dp\u frag.getDialog()。为此,我修改了我的代码,如下所示:
//wait for dialog fragment
solo.waitForFragmentByTag(DatePicker_Fragment.TAG);
//get a reference to dialog fragment
SherlockFragmentActivity current_activity = (SherlockFragmentActivity) solo.getCurrentActivity();
DatePicker_Fragment dp_frag = (DatePicker_Fragment) current_activity.getSupportFragmentManager().findFragmentByTag(DatePicker_Fragment.TAG);
//wait until dialog fragment is visible on screen
assertNotNull(dp_frag);
while(!(dp_frag.isShown())){
Log.w(getName(), "Dialog fragment visible " + dp_frag.isShown());
solo.sleep(100);
}
//set the start date
DatePickerDialog dp_dialog = (DatePickerDialog) dp_frag.getDialog();
assertNotNull(dp_dialog);
DatePicker datePicker = dp_dialog.getDatePicker();
solo.setDatePicker(datePicker,2013,5,21);
solo.clickOnView(dp_dialog.getButton(DatePickerDialog.BUTTON_POSITIVE));
在DatePickerDialogFragment中,我添加了以下方法:
public boolean isShown(){
if(getDialog() == null){
return false;
}else{
return true;
}
}
如果没有robotium,它是否工作正常?您是否以干扰资源加载/布局膨胀的方式检测了
上下文
?否,我正在以标准方式传递上下文。datepickerdialog确实显示在屏幕上。只有在调用getDatePicker时,我才会得到异常。您传递了此参数或上下文吗对话框中的参数?尝试如下操作:DatePickerDialog dp_dialog=(DatePickerDialog)dp_frag.getDialog(this);相反,您还可以传递上下文