I'm trying to use JSON to insert images into a recycler view. It seems like the information is being read, but it never stops and eventually gives me an out of memory exception. The trace says Background sticky concurrent mark sweep GC freed over and over for about 2 minutes then throws the error. The real error here isn't clear to me or I would give more information, please ask questions for clarification if you need it.
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://dog.ceo/api/breeds/image/random/")
.addConverterFactory(GsonConverterFactory.create())
.build();
JsonAnimalApi jsonAnimalApi = retrofit.create(JsonAnimalApi.class);
Call<Animal> call = jsonAnimalApi.getAnimals();
System.out.println("Here");
call.enqueue(new Callback<Animal>() {
@Override
public void onResponse(Call<Animal> call, Response<Animal> response) {
System.out.println("HERE");
if (response.isSuccessful()) {
while (names.size() < 50) names.add(response.body().getPicture());
tvResponse.setText("Code: " + response.code());
return;
}
RecyclerView recyclerView = rootView.findViewById(R.id.recycler_view);
RecyclerViewAdapter rAdapter = new RecyclerViewAdapter(names, this);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(rAdapter);
public interface JsonAnimalApi {
@GET("animals")
Call<Animal> getAnimals();
}
public class Animal {
private ImageView picture;
private String status;
private String message;
public ImageView getPicture() {
return picture;
}
public String getStatus() {
return status;
}
public String getMessage() {
return message;
}
}
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private ArrayList<ImageView> mAnimalNames;
private OnNoteListener mOnNote;
public RecyclerViewAdapter(ArrayList<ImageView> mAnimalNames, OnNoteListener mOnNote) {
this.mAnimalNames = mAnimalNames;
this.mOnNote = mOnNote;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem, parent, false);
ViewHolder holder = new ViewHolder(view, mOnNote);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder: ");
}
@Override
public int getItemCount() {
return mAnimalNames.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView animalName;
OnNoteListener onNote;
public ViewHolder(@NonNull View itemView, OnNoteListener onNote) {
super(itemView);
animalName = itemView.findViewById(R.id.animal_name);
this.onNote = onNote;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
mOnNote.onNoteClick(getAdapterPosition(), mAnimalNames);
}
}
public interface OnNoteListener {
void onNoteClick(int pos, ArrayList<ImageView> names);
}
}