Как исправить «Попытку вызвать виртуальный метод int java.lang.String.length ()» для ссылки на нулевой объект в java.io.StringReader »?

Когда я запускаю приложение, оно запускается успешно, но через некоторое время вылетает и показывает эту ошибку:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.tregix.serviceprovider, PID: 16455 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference at java.io.StringReader.(StringReader.java:50) at android.text.HtmlToSpannedConverter.convert(Html.java:758) at android.text.Html.fromHtml(Html.java:245) at android.text.Html.fromHtml(Html.java:188) at com.tregix.serviceprovider.adapters.CategoryRecyclerViewAdapter.onBindViewHolder(CategoryRecyclerViewAdapter.java:44) at com.tregix.serviceprovider.adapters.CategoryRecyclerViewAdapter.onBindViewHolder(CategoryRecyclerViewAdapter.java:24) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)

Мой код приведен ниже

    public class CategoryRecyclerViewAdapter extends RecyclerView.Adapter<CategoryRecyclerViewAdapter.ViewHolder> {
        private final List<Category> mValues;
        private final OnListInteractionListener mListener;

        public CategoryRecyclerViewAdapter(List<Category> items,
                                           OnListInteractionListener listener) {
            mValues = items;
            mListener = listener;
        }

        @Override
        public CategoryRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.category_item, parent, false);
            return new CategoryRecyclerViewAdapter.ViewHolder(view);
        }

        @Override
        public void onBindViewHolder(final CategoryRecyclerViewAdapter.ViewHolder holder, int position) {
            holder.mItem = mValues.get(position);
            holder.mCategoryView.setText(Html.fromHtml(mValues.get(position).getTitle()));

            if (mValues.get(position).getSubCategories() != null &&
                    !mValues.get(position).getSubCategories().isEmpty() ) {
                String subTitle = Constants.EMPTY_STRING;
                for(SubCategory subCategory : mValues.get(position).getSubCategories()){
                    subTitle = subTitle.concat(subCategory.getTitle()+ ", ");
                }
                if ( !subTitle.isEmpty() && subTitle.charAt(subTitle.length() - 2) == ',') {
                    subTitle = subTitle.substring(0, subTitle.length() - 2);
                }

               holder.description.setText(subTitle);

            }

            Picasso.with(holder.mThumb.getContext()).load("http:"+mValues.get(position).getCategoryImage().
                    getUrl()).placeholder(R.drawable.placeholder).into(holder.mThumb);


            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (null != mListener) {
                        // Notify the active callbacks interface (the activity, if the
                        // fragment is attached to one) that an item has been selected.
                        mListener.onCategoryListInteraction(holder.mItem);
                    }
                }
            });
        }

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

        public class ViewHolder extends RecyclerView.ViewHolder {
            public final View mView;
            public final TextView mCategoryView;
            public final TextView description;
            public final ImageView mThumb;
            public Category mItem;

            public ViewHolder(View view) {
                super(view);
                mView = view;
                mCategoryView = (TextView) view.findViewById(R.id.cateogry_title);
                description = (TextView) view.findViewById(R.id.cateogry_desc);
                mThumb =  view.findViewById(R.id.cateogry_icon);

            }

            @Override
            public String toString() {
                return super.toString() + " '" + description.getText() + "'";
            }
        }
    }

Я думаю, что ваш mValues.get(position).getTitle(), который вы передаете в Html.fromHtml, нулевой

Vladyslav Matviienko 18.12.2018 10:32

Пожалуйста, прочтите При каких обстоятельствах я могу добавить к моему вопросу «срочно» или другие похожие фразы, чтобы получить более быстрые ответы? - вкратце, это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.

halfer 24.12.2018 15:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
4 696
1

Ответы 1

вы проверяете, пуст ли субтитр:

if ( !subTitle.isEmpty() && subTitle.charAt(subTitle.length() - 2) == ',') {
                    subTitle = subTitle.substring(0, subTitle.length() - 2);
                }

но ошибка предполагает, что в некоторых случаях он равен нулю, что вы не проверяли:

if ( subTitle!= null && !subTitle.isEmpty() && subTitle.charAt(subTitle.length() - 2) == ',') {
        subTitle = subTitle.substring(0, subTitle.length() - 2);
}

но он показывает ошибку на com.tregix.serviceprovider.adapters.CategoryRecyclerViewAdap‌ ter.onBindViewHolder‌ (CategoryRecyclerVie‌ wAdapter.java:44) в com.tregix.serviceprovider.adapters.CategoryRecyclerViewAdap‌ tercycieciejava 24) at

Aman naikya 18.12.2018 16:43

ты пробовал мое решение? он все еще рушится?

Lukas Novicky 21.12.2018 17:12

Другие вопросы по теме