Reputation: 11
here is my code i dont know why its not working now songs is a simple java class which contains getter setters
Before fetching data from JSON
i try to statically add data in recycleView and that was working perfectly fine.
Here is code,
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_track, container, false);
myOnClickListener = new track.MyOnClickListener(getActivity());
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview1);
//recyclerView.setHasFixedSize(true);
layoutManager = new GridLayoutManager(getActivity(), 2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
loadData();
return view;
}
code of JSON parsing using volley
private void loadData()
{
String url = "http://homejobs.live/mydata.php";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>(){
@Override
public void onResponse(String response) {
try{
JSONArray jsonArray = new JSONArray(response);
Log.d("test", String.valueOf(jsonArray));
Log.d("test", String.valueOf(jsonArray.length()));
for(int i =0 ; i < jsonArray.length() ; i++)
{
JSONObject jsonObject = jsonArray.getJSONObject(i);
songs item = new songs(
jsonObject.getString("id"),
jsonObject.getString("name"),
jsonObject.getString("uri")
);
Log.d("key", String.valueOf(item));
data.add(item);
}
adapter = new recycler_view_adapter(data);
recyclerView.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("error"+error);
}
}
);
mRequestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
mRequestQueue.add(stringRequest);
}
recycler_view_adapter class
public class recycler_view_adapter extends RecyclerView.Adapter<recycler_view_adapter.MyViewHolder> {
private ArrayList<songs> dataSet;
public static class MyViewHolder extends RecyclerView.ViewHolder {
public static TextView textViewName;
public static ImageView imageViewIcon;
public MyViewHolder(View itemView) {
super(itemView);
this.textViewName = (TextView) itemView.findViewById(R.id.textView);
this.imageViewIcon = (ImageView) itemView.findViewById(R.id.imageView3);
}
}
public recycler_view_adapter(ArrayList<songs> data) {
this.dataSet = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card, parent, false);
view.setOnClickListener(track.myOnClickListener);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
Log.d("hy","test");
songs songsData = dataSet.get(position);
MyViewHolder.textViewName.setText(songsData.getName());
System.out.println("hello"+position);
Picasso.get()
.load(songsData.getImage())
.into(MyViewHolder.imageViewIcon);
}
@Override
public int getItemCount()
{
return dataSet.size();
}
}
Upvotes: 1
Views: 66
Reputation: 2386
Try replacing onBindViewHolder with this
public void onBindViewHolder(final MyViewHolder holder, final int position) {
Log.d("hy","test");
songs songsData = dataSet.get(position);
holder.textViewName.setText(songsData.getName());
System.out.println("hello"+position);
Picasso.get()
.load(songsData.getImage())
.into(holder.imageViewIcon);
}
Upvotes: 0
Reputation: 2217
In your onBindViewHolder, change the following code
MyViewHolder.textViewName.setText(songsData.getName());
System.out.println("hello"+position);
Picasso.get()
.load(songsData.getImage())
.into(MyViewHolder.imageViewIcon);
to the following
holder.textViewName.setText(songsData.getName());
System.out.println("hello"+position);
Picasso.get()
.load(songsData.getImage())
.into(holder.imageViewIcon);
In your code, you are trying to access the textview by using the class name. Instead you should use the holder
variable.
Also please check whether you are parsing the json correctly. Check if the
data.add(item);
in the api response is getting executed. Another suggestion would be to check the size of your dataSet array in the adapter constructor.
Upvotes: 1