简体   繁体   English

应用正在Android Studio中停止,但可以编译

[英]App is Stopping in Android Studio, but it compiles

I am sorry if this was asked before but I can not seem to find a solution for this problem. 很抱歉,如果以前有人问过这个问题,但我似乎找不到解决此问题的方法。

I am working in Android Studio and following a tutorial from a book about developing an app and working with RecyclerView, and the app is stopping even though it compiles in Android Studio. 我正在Android Studio中工作,并遵循了一本书中有关开发应用程序和使用RecyclerView的教程,尽管该应用程序可以在Android Studio中编译,但该应用程序正在停止。

The code is the exact code from the book, so I checked and Logcat gives me these types of errors: 该代码是本书中的确切代码,因此我检查了一下,Logcat给了我这些类型的错误:

FATAL EXCEPTION: main     Process: ndroid.bignerdranch.com, PID: 17436    
    java.lang.NullPointerException: Attempt to invoke virtual method
    'void android.widget.TextView.setText(java.lang.CharSequence)' on a
    null object reference         at
    ndroid.bignerdranch.com.CrimeListFragment$CrimeHolder.bind
    (CrimeListFragment.java:62)
        at ndroid.bignerdranch.com.CrimeListFragment$CrimeAdapter.onBindViewHolder** 
   (CrimeListFragment.java:91)**
        at ndroid.bignerdranch.com.CrimeListFragment$CrimeAdapter.onBindViewHolder** 
   (CrimeListFragment.java:74)**
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7056)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7098)
        at 


 androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6010)

Here is the CrimeListFragment class code that seems to have errors: 这是CrimeListFragment类代码,似乎有错误:

package ndroid.bignerdranch.com;

        import android.os.Bundle;

    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    import android.widget.Toast;

    import java.util.List;

    import androidx.fragment.app.Fragment;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    import ndroid.bignerdranch.com.R;

    public class CrimeListFragment extends Fragment {
        private RecyclerView mCrimeRecyclerView;
        private CrimeAdapter mAdapter;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_crime_list, container, false);

            mCrimeRecyclerView = (RecyclerView) view
                    .findViewById(R.id.crime_recycler_view);
            mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

            updateUI();

            return view;
        }

        private void updateUI() {
            CrimeLab crimeLab = CrimeLab.get(getActivity());
            List crimes = crimeLab.getCrimes();

            mAdapter = new CrimeAdapter(crimes);
            mCrimeRecyclerView.setAdapter(mAdapter);
        }

        private class CrimeHolder extends RecyclerView.ViewHolder
                implements View.OnClickListener {

            private Crime mCrime;

            private TextView mTitleTextView;
            private TextView mDateTextView;

            public CrimeHolder(LayoutInflater inflater, ViewGroup parent) {
                super(inflater.inflate(R.layout.list_item_crime, parent, false));
                itemView.setOnClickListener(this);

                mTitleTextView = (TextView) itemView.findViewById(R.id.crime_title);
                mDateTextView = (TextView) itemView.findViewById(R.id.crime_date);
            }

            public void bind(Crime crime) {
                mCrime = crime;
                mTitleTextView.setText(mCrime.getTitle());
                mDateTextView.setText(mCrime.getDate().toString());
            }

            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(),
                        mCrime.getTitle() + " clicked!", Toast.LENGTH_SHORT)
                        .show();
            }
        }

        private class CrimeAdapter extends RecyclerView.Adapter {

            private List mCrimes;

            public CrimeAdapter(List crimes) {
                mCrimes = crimes;
            }

            @Override
            public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
                return new CrimeHolder(layoutInflater, parent);
            }

            @Override
            public void onBindViewHolder(CrimeHolder holder, int position) {
                Crime crime = mCrimes.get(position);
                holder.bind(crime);
            }

            @Override
            public int getItemCount() {
                return mCrimes.size();
            }
        }
    }

Your mTitleTextView is null, and you try to call a method of null. 您的mTitleTextView为null,并且您尝试调用null方法。 The variable is assigned at the method above: 该变量是通过上述方法分配的:

mTitleTextView = (TextView) itemView.findViewById(R.id.crime_title);

The findViewById method returns null when it can't find the view with the given id inside the view it is called on ( itemView in your case). 当在调用该视图的视图中找不到具有给定id的视图时, findViewById方法将返回null(在您的情况下为itemView )。 I can't find in your code where this view comes from but you need to check and make sure that a view with the id crime_title is actually part of it. 我在您的代码中找不到此视图的来源,但是您需要检查并确保ID为crime_title的视图实际上是其中的一部分。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM