Images Listed by Recyclerview Disappear when giving Scroll and when filtered by Getfilter() all Somem

Asked

Viewed 24 times

0

Hello, I’m new to Android and I face a problem. I am bringing from the database a list of cars by Recyclerview in a Fragment, and bring together the images of them in binary format. I’ve been able to convert to bitmap to display them in Imageview, but when I scroll some images disappear and when filter by Edittext All Somem!

My Fragment:

public class CarFragment extends Fragment {

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

    // Set the adapter
    Context context = view.getContext();
    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.RVCAR);

    recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    final CarrosAdapter adapter = new CarrosAdapter(context, Conexao.pesquisarCarros(context));
    recyclerView.setAdapter(adapter);
    final EditText editText = (EditText) view.findViewById(R.id.search_car);
    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            adapter.getFilter().filter(s);
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
        @Override
        public void afterTextChanged(Editable s) {
            adapter.getFilter().filter(s);
        }
    });

    return view;
}

public static CarFragment newInstance() {
    return new CarFragment();
}
}

My Adapter:

public class CarrosAdapter extends RecyclerView.Adapter<CarrosAdapter.ViewHolder> implements Filterable{

//private List<ListaCarros> mValues;
//private List<ListaCarros> mValuesAll;
List<ListaCarros> mValues,mValuesAll;
Context context;
public  CarrosAdapter(Context context, List<ListaCarros> items) {
    this.context = context;
    this.mValues = items;
    this.mValuesAll = items;
}


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

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    holder.mItem = mValuesAll.get(position);
    holder.mNomeCarroView.setText(mValuesAll.get(position).getNomeCar());
    holder.mVersaoCarroView.setText(mValuesAll.get(position).getVersaoCar());
    holder.mValorCarroView.setText("R$ " + String.valueOf(mValuesAll.get(position).getValorCar()));
    holder.mAnoCarView.setText("Ano: " + String.valueOf(mValuesAll.get(position).getAnoCar()));

    Bitmap image = BitmapFactory.decodeStream(mValuesAll.get(position).getImagemCar());

    Glide.with(holder.mImageCarView.getContext()).load(image).fitCenter().
            into(holder.mImageCarView);
   // holder.mImageCarView.setImageBitmap(image);
}

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



public class ViewHolder extends RecyclerView.ViewHolder {
    public final View mView;
    public final TextView mNomeCarroView;
    public final TextView mVersaoCarroView;
    public final TextView mValorCarroView;
    public final TextView mAnoCarView;
    public final ImageView mImageCarView;
    public ListaCarros mItem;

    public ViewHolder(View view) {
        super(view);
        mView = view;
        mNomeCarroView = (TextView) view.findViewById(R.id.nomeCar);
        mVersaoCarroView = (TextView) view.findViewById(R.id.versaoCar);
        mValorCarroView = (TextView) view.findViewById(R.id.valorCar);
        mAnoCarView = (TextView) view.findViewById(R.id.anoCar);
        mImageCarView = (ImageView) view.findViewById(R.id.car_photo);
    }

    @Override
    public String toString() {
        return super.toString() + " '" + mNomeCarroView.getText() + "'";
    }
}
@Override
public Filter getFilter() {
    Filter filter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();

            ArrayList<ListaCarros> arrayListFilter = new ArrayList<ListaCarros>();

            if(constraint == null|| constraint.length() == 0) {
                results.count = mValues.size();
                results.values = mValues;
            } else {
                for (ListaCarros itemModel : mValues) {
                    if(itemModel.getNomeCar().toLowerCase().contains(constraint.toString().toLowerCase())) {
                        arrayListFilter.add(itemModel);
                    }
                }
                results.count = arrayListFilter.size();
                results.values = arrayListFilter;

            }
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            mValuesAll = (ArrayList<ListaCarros>) results.values;
            notifyDataSetChanged();

            if(mValues.size() == 0) {
                Toast.makeText(context, "Not Found", Toast.LENGTH_LONG).show();
            }

        }
    };
    return filter;
}
}

My Class List Cars:

public class ListaCarros {
private String nomeCar;
private String versaoCar;
private BigDecimal valorCar;
private int anoCar;
private InputStream imagemCar;

public ListaCarros(String nomeCar, String versaoCar, BigDecimal valorCar, int anoCar, InputStream imagemCar) {
    this.nomeCar = nomeCar;
    this.versaoCar = versaoCar;
    this.valorCar = valorCar;
    this.anoCar = anoCar;
    this.imagemCar = imagemCar;
}

public InputStream getImagemCar() {
    return imagemCar;
}

public void setImagemCar(InputStream imagemCar) {
    this.imagemCar = imagemCar;
}

public String getNomeCar() {
    return nomeCar;
}

public void setNomeCar(String nomeCar) {
    this.nomeCar = nomeCar;
}

public String getVersaoCar() {
    return versaoCar;
}

public void setVersaoCar(String versaoCar) {
    this.versaoCar = versaoCar;
}

public BigDecimal getValorCar() {
    return valorCar;
}

public void setValorCar(BigDecimal valorCar) {
    this.valorCar = valorCar;
}

public int getAnoCar() {
    return anoCar;
}

public void setAnoCar(int anoCar) {
    this.anoCar = anoCar;
}
}

My search for the Bank:

public static List<ListaCarros> pesquisarCarros(Context context) {
    List<ListaCarros> lista = null;

    PreparedStatement pst;

    try {
        pst = Conexao.connectar(context).prepareStatement(
        "select (MARCA +' '+ MODELO) as NOMECAR, VERSAO, VALOR, ANO,\n" +
                "F.IMAGEM \n" +
                "from AUTOMOVEL as A \n" +
                "LEFT JOIN FICHA_TECNICA as F on F.AUTOMOVEL_ID = A.ID"

        );

        ResultSet res = pst.executeQuery();
        lista = new ArrayList<ListaCarros>();

        while (res.next()) {
            //for(int l=0; l<=5; l++) {
            lista.add(new ListaCarros(
                    res.getString(1),
                    res.getString(2),
                    res.getBigDecimal(3),
                    res.getInt(4),
                    res.getBinaryStream(5)
            ));
        }
        //}
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return lista;
}

When I give scroll and Filter Logcat shows this error:

Load failed for null with size [-1x-1]
class com.bumptech.glide.load.engine.GlideException: Received null model

inserir a descrição da imagem aqui inserir a descrição da imagem aqui

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.