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