Member 13366692 Ответов: 1

Как получить изображение из интернета android


Я работаю над новостным проектом android с помощью RSS-канала, мое приложение теперь может получить название,описание,Время новостей идеально, но я не могу получить изображение, которое показывает мне эту ошибку: я не знаю, где я согрешил ! Ineed help please >>> Это ошибка в любом месте :
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)

это мой код (мой 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;
}

}

это (мой 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();
}

это линия, которая contints выше сообщение об ошибке (держатель.gimage.setImageURI(URI-адрес.синтаксический анализ(статья.образец getimage())) ;) это (мой 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;
})


Что я уже пробовал:

Я пробовал какой - то код, он находится внутри кода !

1 Ответов

Рейтинг:
4

User 7429338

setImageURI принимает только локальный URI; вы передаете ему веб-URL?
Если это так, то вы можете сначала загрузить изображение, а затем передать локальный URI.


Member 13366692

каким может быть держатель, если я использую ваш код!вот так или как?
public void onBindViewHolder(MyHolder holder, int position) {

Article article=articles.get(позиция);
держатель.gimage.setImageURI (URI-адрес.синтаксический анализ(статья.образец getimage())); ;

}