Click here to Skip to main content
15,905,508 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I'm working on news android project using RSS feed, my app now can get title,description,time of news perfictly but Ican't get the Image it show me that error: I do not know where I sinned ! Ineed help please >>> this is the error anywhere :
java.lang.NullPointerException: uriString
                                                                             at android.net.Uri$StringUri.<init>(Uri.java:464)
                                                                             at android.net.Uri$StringUri.<init>(Uri.java:454)
                                                                             at android.net.Uri.parse(Uri.java:426)
                                                                             at com.example.drmzr.myapplication.MyAdapter.onBindViewHolder(MyAdapter.java:36)
                                                                             at com.example.drmzr.myapplication.MyAdapter.onBindViewHolder(MyAdapter.java:12)
                                                                             at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5453)
                                                                             at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5486)
                                                                             at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4723)

this is my code (my Article.java) :
public class Article {

String title,description,date,link,image;

public String getTitle() {
    return title;
}

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

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image  = image;
}


public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getDate() {
    return date;
}

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

public String getLink() {
    return link;
}

public void setLink(String link) {
    this.link = link;
}

}

this is (my Adapter.java) :
public class MyAdapter extends RecyclerView.Adapter<MyHolder> {

Context c;
ArrayList<Article> articles;

public MyAdapter(Context c, ArrayList<Article> articles) {
    this.c = c;
    this.articles = articles;
}

@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v= LayoutInflater.from(c).inflate(R.layout.model,parent,false);
    return new MyHolder(v);
}

@Override
public void onBindViewHolder(MyHolder holder, int position) {

    Article article=articles.get(position);

    holder.titleTxt.setText(article.getTitle());
    holder.descTxt.setText(article.getDescription());
    holder.dateTxt.setText(article.getDate());
    holder.gimage.setImageURI(Uri.parse(article.getImage())) ;

}

@Override
public int getItemCount() {
    return articles.size();
}

this the line that contints the above error (holder.gimage.setImageURI(Uri.parse(article.getImage())) ;) this is (my RSSParser.java) :
public class RSSParser extends AsyncTask<Void,Void,Boolean> {

Context c;
InputStream is;
RecyclerView rv;

ProgressDialog pd;
ArrayList<Article> articles=new ArrayList<>();

public RSSParser(Context c, InputStream is, RecyclerView rv) {
    this.c = c;
    this.is = is;
    this.rv = rv;
}
@Override
protected void onPreExecute() {
    super.onPreExecute();
    pd=new ProgressDialog(c);
    pd.setTitle("Parse data");
    pd.setMessage("Parsing data...Please wait");
    pd.show();
}

@Override
protected Boolean doInBackground(Void... params) {
    return this.parseRSS();
}

@Override
protected void onPostExecute(Boolean isParsed) {
    super.onPostExecute(isParsed);
    pd.dismiss();
    if(isParsed)
    {
        //Bind
        rv.setAdapter(new MyAdapter(c,articles));

    }else {
        Toast.makeText(c,"Unable To Parse", Toast.LENGTH_SHORT).show();
    }
}

private Boolean parseRSS()
{
    try
    {
        XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
        XmlPullParser parser=factory.newPullParser();

        parser.setInput(is, null);
        int event=parser.getEventType();

        String value=null;

        articles.clear();
        Article article=new Article();

        do {
            String name=parser.getName();

            switch (event)
            {
                case XmlPullParser.START_TAG:
                    if(name.equals("item"))
                    {
                        article=new Article();
                    }

                    break;

                case XmlPullParser.TEXT:
                    value=parser.getText();
                    break;

                case XmlPullParser.END_TAG:

                    if(name.equals("title"))
                    {
                        article.setTitle(value);

                    }
                    else if(name.equals("description"))
                    {
                        article.setDescription(value);

                    }else if(name.equals("pubDate"))
                    {
                        article.setDate(value);

                    }else if(name.equals("date"))
                    {
                        article.setDate(value);

                    }else if(name.equals("image"))
                    {
                        article.setImage(value) ;

                    }

                    if(name.equals("item"))
                    {
                        articles.add(article);
                    }
                    break;
            }

            event=parser.next();

        }while (event != XmlPullParser.END_DOCUMENT);

        return true;

    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
})


What I have tried:

I have tried some code it is inside the code !
Posted
Updated 17-Apr-18 3:14am

1 solution

setImageURI only accepts a local URI; are you passing it a web URL?
If so, you could download the image first and then pass the local URI.
 
Share this answer
 
Comments
Member 13366692 18-Apr-18 14:51pm    
what may holder should be if i use your code!like that or what?
public void onBindViewHolder(MyHolder holder, int position) {

Article article=articles.get(position);
holder.gimage.setImageURI (Uri.parse(article.getImage())); ;

}

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900