【问题标题】:Android project: errors after changing machineAndroid项目:换机报错
【发布时间】:2015-06-13 09:29:58
【问题描述】:

所以我已经读完这本书了,Android Programming: The Big Nerd Ranch Guide,当我不得不改变时,我几乎完成了 CriminalIntent 应用程序从台式机到笔记本电脑。我刚刚复制了工作区并安装了 eclipse 和 SDK。现在 logcat 在尝试添加新罪行时给了我这个:

06-13 09:10:47.720: E/AndroidRuntime(535): java.lang.NullPointerException
06-13 09:10:47.720: E/AndroidRuntime(535):  at com.bignerdranch.android.criminalintent.CrimeFragment.onCreateView(CrimeFragment.java:102)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.view.ViewPager.populate(ViewPager.java:1072)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.view.ViewPager.populate(ViewPager.java:918)
06-13 09:10:47.720: E/AndroidRuntime(535):  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1440)

CrimeFragment 的第 102 行是:

getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);

也许新的支持库有一些不同?会很奇怪,我在一个月前做了我以前的设置。

另一件事是我首先安装了Android Studio和SDK,然后只是将eclipse指向那个SDK,也许这就是问题所在? 该代码在旧机器上运行良好,所以我不会在此处发布,但如果您需要,我可以。

编辑:

@TargetApi(11)
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
    /* int resource, ViewGroup root, boolean attachToRoot */
    View v = inflater.inflate(R.layout.fragment_crime, parent, false);
    // enabling back button on menu bar to be shown
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        /*
         * this action bar (guess back button in particular) is only compatible with holo.light
         * theme, maybe some others idk. There is a way around it but it is complicated, need to
         * use supportActionBar
         */
        if (NavUtils.getParentActivityName(getActivity()) != null) {
            getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    mTitleField = (EditText) v.findViewById(R.id.crime_title);
    mTitleField.setText(mCrime.getTitle());
    mTitleField.addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence c, int start, int before, int count) {
            mCrime.setTitle(c.toString());
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    mDateButton = (Button) v.findViewById(R.id.crime_date);
    mDateButton.setOnClickListener(new View.OnClickListener() {
        /*
         * standard procedure of sending info between fragments of same activity - use
         * NewInstance
         */
        @Override
        public void onClick(View v) {
            FragmentManager fm = getActivity().getSupportFragmentManager();
            DatePickerFragment dialog = DatePickerFragment.newInstance(mCrime.getDate());
            /*
             * setting itself as a target to receive REQUEST_DATE after child is dead; first set
             * up REQUEST_DATE string; used together with private void sendResult(int
             * resultCode) and DialogInterface.onClickListener in positive button in
             * datePickerFragment, overriding onActivityResult is necessary in here
             */
            dialog.setTargetFragment(CrimeFragment.this, REQUEST_DATE);
            dialog.show(fm, DIALOG_DATE);
        }
    });

    mTimeButton = (Button) v.findViewById(R.id.crime_time);
    mTimeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fm = getActivity().getSupportFragmentManager();
            TimePickerFragment dialog = TimePickerFragment.newInstance(mCrime.getDate());
            dialog.setTargetFragment(CrimeFragment.this, REQUEST_TIME);
            dialog.show(fm, DIALOG_TIME);
        }
    });
    mDeleteButton = (Button) v.findViewById(R.id.crime_delete);
    mDeleteButton.setText(R.string.delete_crime);
    mDeleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            UUID crimeId = (UUID) getArguments().getSerializable(EXTRA_CRIME_ID);
            CrimeLab crimeLab = CrimeLab.get(getActivity());
            Crime crime = CrimeLab.get(getActivity()).getCrime(crimeId);
            crimeLab.deleteCrime(crime);
            crimeLab.saveCrimes();
            getActivity().finish();
        }
    });
    mPhotoButton = (ImageButton) v.findViewById(R.id.crime_imageButton);
    mPhotoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getActivity(), CrimeCameraActivity.class);
            startActivity(i);
        }
    });
    // disabling camera button for devices without camera
    PackageManager pm = getActivity().getPackageManager();
    if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)
                    && !pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {
        mPhotoButton.setEnabled(false);
    }

    mSolvedCheckBox = (CheckBox) v.findViewById(R.id.crime_solved);
    mSolvedCheckBox.setChecked(mCrime.isSolved());
    mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(
                        /* checkButton needs compoundButton */CompoundButton buttonView,
                        boolean isChecked) {
            mCrime.setSolved(isChecked);
        }
    });
    updateDate();
    updateTime();
    return v;
}

【问题讨论】:

    标签: java android eclipse android-studio


    【解决方案1】:

    它指出您的ActionBarnull。如果您使用的是支持库 试试

    getActivity().getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    

    而不是

    getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
    

    【讨论】:

    • 不,在这种情况下,我使用的是标准 ActionBar
    • if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB){ if(NavUtils.getParentActivityName(getActivity())!=null){ getActivity().getActionBar().setDisplayHomeAsUpEnabled(true ); } }
    • 请发布您的CrimeFragment.onCreateView() 方法
    • getActionBar() 肯定有问题我仍在努力理解为什么它不再被创建,当我尝试从弹出菜单中单击另一个项目时,它会在其他地方引发相同的错误 06-13 10 :26:54.432: E/AndroidRuntime(592): 在 com.bignerdranch.android.criminalintent.CrimeListFragment.onOptionsItemSelected(CrimeListFragment.java:60)
    • 你是对的人,我应该使用 ((ActionBarActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);这样就省去了我半天的追鬼时间。不过也不得不更改一些其他文件。但是我仍然不明白为什么它可以在我的旧 PC 上运行并且由于某种原因停止在这里工作.. 无论如何谢谢
    猜你喜欢
    • 2013-08-02
    • 2014-07-21
    • 2014-09-19
    • 2017-09-24
    • 1970-01-01
    • 2013-07-04
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多