Когда я запускаю приложение, оно запускается успешно, но через некоторое время вылетает и показывает эту ошибку:
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() + "'";
}
}
}
Пожалуйста, прочтите При каких обстоятельствах я могу добавить к моему вопросу «срочно» или другие похожие фразы, чтобы получить более быстрые ответы? - вкратце, это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.
вы проверяете, пуст ли субтитр:
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
ты пробовал мое решение? он все еще рушится?
Я думаю, что ваш
mValues.get(position).getTitle()
, который вы передаете вHtml.fromHtml
, нулевой