I asked a question that how to parse JSON data in fragments. But anybody didn't give me a suitable answer. Dear friends, in my app I have done all coding but I am unable to fix the main problem in the Quotes fragment.
private void setupRecyclerView(List<QuotesModel> quotesModelList) {
QuotesAdapter quotesAdapter = new QuotesAdapter(this,quotesModelList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(quotesAdapter);
}
I have created this private method, but this context gives the error with a red line. Here, I am sharing all coding please tell me where I am wrong.
package com.myquotescollector.Fragments;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonRequest;
import com.android.volley.toolbox.Volley;
import com.myquotescollector.Adapters.QuotesAdapter;
import com.myquotescollector.Models.QuotesModel;
import com.myquotescollector.R;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class QuotesFragment extends Fragment {
private final String JSON_URL = "https://run.mocky.io/v3/81af69d1-0a72-42ba-973d-2fc2f4fafeaf";
JsonArrayRequest request;
RequestQueue requestQueue;
List<QuotesModel> quotesModelList;
RecyclerView recyclerView;
public QuotesFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_quotes, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.quotesRecyclerView);
jsonrequest();
quotesModelList = new ArrayList<>();
return view;
}
private void jsonrequest() {
request = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
JSONObject jsonObject = null;
for (int i=0; i<response.length(); i++) {
try {
jsonObject = response.getJSONObject(i);
QuotesModel quotesList = new QuotesModel("name", "description", "image");
quotesList.setName(jsonObject.getString("name"));
quotesList.setDescription(jsonObject.getString("description"));
quotesList.setImage(jsonObject.getInt("image"));
quotesModelList.add(quotesList);
}catch (JSONException e){
e.printStackTrace();
}
}
setupRecyclerView(quotesModelList);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue = Volley.newRequestQueue(QuotesFragment.this);
requestQueue.add(request);
}
private void setupRecyclerView(List<QuotesModel> quotesModelList) {
QuotesAdapter quotesAdapter = new QuotesAdapter(this,quotesModelList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(quotesAdapter);
}
}
///////////////////////////////////////////////
This is **QuotesAdapter**.java Class
package com.myquotescollector.Adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.myquotescollector.Fragments.QuotesFragment;
import com.myquotescollector.Models.QuotesModel;
import com.myquotescollector.R;
import java.util.ArrayList;
import java.util.List;
public class QuotesAdapter extends RecyclerView.Adapter<QuotesAdapter.ViewHolder> {
private Context Context;
private List<QuotesModel> list;
RequestOptions options;
public QuotesAdapter(Context Context, List<QuotesModel> list) {
this.Context = Context;
this.list = list;
options = new RequestOptions().centerCrop().placeholder(R.drawable.my_shape).error(R.drawable.my_shape);
}
@NonNull
@Override
public QuotesAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(Context).inflate(R.layout.sample_quotes, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull QuotesAdapter.ViewHolder holder, int position) {
holder.name.setText(list.get(position).getName());
holder.description.setText(list.get(position).getDescription().toString());
holder.img.setImageResource(list.get(position).getImage());
//Here we have one dependency//
Glide.with(Context).load(list.get(position).getImage()).apply(options).into(holder.img);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView name, description;
ImageView img;
public ViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.tvName);
description = itemView.findViewById(R.id.tvDescription);
img = itemView.findViewById(R.id.imgJson);
}
}
}