0

REST API XML

posts[ { "id": 16344, "date": "2017-11-29T12:45:58", "date_gmt": "2017-11-29T07:15:58", "modified": "2017-11-29T12:45:58", "modified_gmt": "2017-11-29T07:15:58", "type": "post", "title": { "rendered": "This is post from example.com" }, "content": { "rendered": "

This is post from example.com

\n", "protected": false }, "excerpt": { "rendered": "

This is post from example.com

\n", "protected": false }, "featured_media": 0, "categories": [ 1 ],
"better_featured_image": {
"id": 16221,
"alt_text": "",
"caption": "",
"description": "",
"media_type": "image",
"media_details": {
  "width": 1070,
  "height": 286,
  "sizes": {
    "thumbnail": {
      "file": "under_construction-e1509092603289-150x150.jpg",
      "width": 150,
      "height": 150,
      "mime-type": "image/jpeg",
      "source_url": "http://example.com/under_construction-    e1509092603289-150x150.jpg"
    }
    }
    }
    }

} ]

public class PostList {

@SerializedName("date")
@Expose
private String date;

@SerializedName("title")
@Expose
private Title title;

@SerializedName("excerpt")
@Expose
private Excerpt excerpt;

@SerializedName("better_featured_image")
@Expose
private FeaturedImage betterFeaturedImage;


@SerializedName("categories")
@Expose
private List<Integer> categories = null;



public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}


 public Title getTitle() {
    return title;
}

public void setTitle(Title title) {
    this.title = title;
}




 public Excerpt getExcerpt() {
    return excerpt;
}

public void setExcerpt(Excerpt excerpt) {
    this.excerpt = excerpt;
}


 public FeaturedImage getBetterFeaturedImage() {
    return betterFeaturedImage;
}

public void setBetterFeaturedImage(FeaturedImage betterFeaturedImage) {
    this.betterFeaturedImage = betterFeaturedImage;
}

public List<Integer> getCategories() {
    return categories;
}

public void setCategories(List<Integer> categories) {
    this.categories = categories;
}



public class FeaturedImage {

@SerializedName("media_details")
@Expose
private MediaDetail media_details = null;


public MediaDetail getMedia_details() {
    return media_details;
}

public void setMedia_details(MediaDetail media_details) {
    this.media_details = media_details;
}

}

public class MediaDetail {

@SerializedName("sizes")
@Expose
private Sizes sizes = null;

public Sizes getSizes() {
    return sizes;
}

public void setSizes(Sizes sizes) {
    this.sizes = sizes;
}

}

public class Sizes {

@SerializedName("medium")
@Expose
private Medium medium = null;

public Medium getMedium() {
    return medium;
}

public void setMedium(Medium medium) {
    this.medium = medium;
}

}

public class Medium {

@SerializedName("source_url")
@Expose
private String source_url;

public String getSource_url() {
    return source_url;
}

public void setSource_url(String source_url) {
    this.source_url = source_url;
}

}

public class ProgramingAdapter extends RecyclerView.Adapter {

Context context;
private PostList[] data;

public ProgramingAdapter(Context context, PostList[] data) {
    this.context = context;
    this.data = data;

}


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

@Override
public void onBindViewHolder(ProgramingViewHolder holder, int position) {
    PostList FImage = data[position];

    final String Tit = FImage.getTitle().getRendered();

    if (Tit.length() <= 70) {
        holder.txtTitle.setText(Tit);
    } else {
        String TitNew = FImage.getTitle().getRendered().substring(0, 70);
        holder.txtTitle.setText(TitNew + "...");
    }


    String Cat = FImage.getCategories().toString();
    String Cat1 = Cat.replaceAll("\\[", "").replaceAll("\\]", "");
    holder.txtCat.setText(Cat1);

    String date = FImage.getDate().substring(0, 10);
    holder.txtDate.setText(date);


    String Exc = FImage.getExcerpt().getRendered();

    if (Exc.length() <= 80) {
        holder.txtExc.setText(Exc);
    } else {
        String ExcNew = FImage.getExcerpt().getRendered().substring(0, 80);
        holder.txtExc.setText(ExcNew + "...");
    }

    Picasso.with(holder.ImgIcon.getContext()).load(FImage.getBetterFeaturedImage().getMedia_details().getSizes().getMedium().toString()).into(holder.ImgIcon);




    holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast.makeText(context, Tit , Toast.LENGTH_SHORT).show();
            return false;
        }
    });
}



@Override
public int getItemCount() {
    return data.length;
}

public class ProgramingViewHolder extends RecyclerView.ViewHolder {
    ImageView ImgIcon;
    TextView txtTitle;
    TextView txtDate;
    TextView txtExc;
    TextView txtCat;

    public ProgramingViewHolder(View itemView) {
        super(itemView);
        ImgIcon =  itemView.findViewById(R.id.Img);
        txtTitle =  itemView.findViewById(R.id.Title);
        txtDate =  itemView.findViewById(R.id.Date);
        txtExc =  itemView.findViewById(R.id.Exc);
        txtCat =  itemView.findViewById(R.id.Cat);

    }
}

}

public class MainActivity extends AppCompatActivity {

ImageView imageView;
private static final String URL = "http://example.com/wp-json/wp/v2/posts";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);


    imageView = (ImageView) findViewById(R.id.Img);
    final RecyclerView programingList = (RecyclerView) findViewById(R.id.progeramingList);
    programingList.setLayoutManager(new LinearLayoutManager(this));

        final StringRequest request = new StringRequest(Request.Method.GET,URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d("PostList", response);
            GsonBuilder gsonBuilder = new GsonBuilder();
            Gson gson = gsonBuilder.create();
            PostList[] post = gson.fromJson(response, PostList[].class);
            programingList.setAdapter(new ProgramingAdapter(MainActivity.this, post));

            Toast.makeText(MainActivity.this, "Ok", Toast.LENGTH_SHORT).show();
        }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
            }
        });

    RequestQueue queue = Volley.newRequestQueue(this);
    queue.add(request);


}

}

Error

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.dev.recycler_new, PID: 7965 java.lang.NullPointerException: Attempt to invoke virtual method 'com.example.dev.recycler_new.MediaDetail com.example.dev.recycler_new.FeaturedImage.getMedia_details()' on a null object reference at com.example.dev.recycler_new.ProgramingAdapter.onBindViewHolder(ProgramingAdapter.java:70) at com.example.dev.recycler_new.ProgramingAdapter.onBindViewHolder(ProgramingAdapter.java:20)

Alex K
  • 22,315
  • 19
  • 108
  • 236
Kishan
  • 21

1 Answers1

0

your error comes from ProgramingAdapter class Picasso.with(holder.ImgIcon.getContext()).load(FImage.getBetterFeaturedImage().getMedia_details().getSizes().getMedium().toString()).into(holder.ImgIcon);

this line you are loading wrong image data like

FImage.getBetterFeaturedImage().getMedia_details().getSizes().getMedium().toString()

so check this properly your picasso load image code like below

  Picasso.with(context).load(my_data.get(position).getPhoto())
           .into(holder.ImgIcon); 

pass context instead holder.ImgIcon.getContext()

Omkar
  • 3,040
  • 1
  • 22
  • 42