首页 > 解决方案 > 应用程序在没有编译错误的情况下崩溃(xxx 已停止)

问题描述

该应用程序在使用Nexus S5构建版本 24 时运行良好。

我切换到使用 build 23,所以我可以使用File Device Explorer来检查我的 SQLite 数据库文件。

当我切换回版本 24 时,它开始崩溃,在编译时给了我以下输出:

使用或覆盖已折旧的 API

我注释掉了setTime()我用来初始化时间的方法,因为它有几个折旧的方法(setCurrentHoursetCurrentTime)。

不幸的是,它仍然给我编译消息:

使用或覆盖已折旧的 API


    public static final String EXTRA_DATE = "com.bignerdranch.android.criminalintent.time";
    private static final String ARG_DATE = "time";
    private static final String TAG = "TimePickerFragment";
    private TimePicker mTimePicker;

    public static TimePickerFragment newInstance(Date date) {
        Bundle args = new Bundle();
        args.putSerializable(ARG_DATE, date);

        TimePickerFragment fragment = new TimePickerFragment();
        fragment.setArguments(args); // This adds the 'extra'.
        return fragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View v = LayoutInflater.from(getActivity())
                .inflate(R.layout.dialog_time, null);

        mTimePicker = (TimePicker) v.findViewById(R.id.dialog_time_picker);

        return new AlertDialog.Builder(getActivity())
                .setView(v)
                .setTitle(R.string.time_picker_title)
                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {

                    {   // TimePicker lacks an initializer, unlike DatePicker.
                        Date date = (Date) getArguments().getSerializable(ARG_DATE);
                        Calendar calendar = Calendar.getInstance();
                        calendar.setTime(date);
                        int initMinute = calendar.get(Calendar.MINUTE);
                        int initHour = calendar.get(Calendar.HOUR);
                        //setTime(initHour, initMinute);
                    }

                    /*private void setTime(int hour, int minute) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            mTimePicker.setHour(hour);
                            mTimePicker.setMinute(minute);
                        } else {
                            mTimePicker.setCurrentHour(hour);
                            mTimePicker.setCurrentMinute(minute);
                        }
                    }*/


                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Date date = (Date) getArguments().getSerializable(ARG_DATE);
                        Calendar calendar = Calendar.getInstance();
                        calendar.setTime(date);

                        int year = calendar.get(Calendar.YEAR);
                        int month = calendar.get(Calendar.MONTH);
                        int day = calendar.get(Calendar.DAY_OF_MONTH);
                        int minute = mTimePicker.getCurrentMinute();
                        int hour = mTimePicker.getCurrentHour();
                        Date newDate = new GregorianCalendar(year, month, day, hour, minute).getTime();
                        sendResult(Activity.RESULT_OK, newDate);
                    }

                    private void sendResult(int resultCode, Date date) {

                        if (getTargetFragment() == null) {
                            return;
                        }

                        Intent intent = new Intent();
                        intent.putExtra(EXTRA_DATE, date);

                        getTargetFragment()
                                .onActivityResult(getTargetRequestCode(), resultCode, intent);
                    }

                })
                .create();
    }

}

我预计它不会崩溃,并且我怀疑它与使用模拟早期版本 Android 的模拟器时的最近更新有关。

标签: androidandroid-studio

解决方案


推荐阅读