Android RSS解析器和aSyncError

时间:2015-08-12 14:43:54

标签: android rss

我有一个rss解析器,它接受rss feed并尝试在可穿戴列表视图中显示标题。这是我的rss解析器类的代码,

public List headlines, links;
public String url;

public RSSParser(String url){
    this.url = url;
    headlines = new ArrayList();
    links = new ArrayList();

    new GetFeed().execute();
}

public void parse(){
    if(url != null){
        try{
            URL urlReader = new URL(url);
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(false);
            XmlPullParser xpp = factory.newPullParser();
            xpp.setInput(getInputStream(urlReader), "UTF_8");

            boolean insideItem = false;

            int eventType = xpp.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG) {

                    if (xpp.getName().equalsIgnoreCase("item")) {
                        insideItem = true;
                    } else if (xpp.getName().equalsIgnoreCase("title")) {
                        if (insideItem)
                            headlines.add(xpp.nextText()); //extract the headline
                    } else if (xpp.getName().equalsIgnoreCase("link")) {
                        if (insideItem)
                            links.add(xpp.nextText()); //extract the link of article
                    }
                }else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")){
                    insideItem = false;
                }

                eventType = xpp.next(); //move to next element
            }
        }catch(IOException e){
            e.printStackTrace();
        }catch (XmlPullParserException e){
            e.printStackTrace();
        }
    }else{
        Log.e("DEBUG", "The RSS URL is null");
    }
}

public InputStream getInputStream(URL url1){
    try{
        return url1.openConnection().getInputStream();
    }catch (IOException e){
        return null;
    }
}

public List getHeadlines() {
    return headlines;
}

public List getLinks() {
    return links;
}

public class GetFeed extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(Void... params) {
        Log.i("DEBUG", "DO IN BACKGROUND DONE");
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        Log.i("DEBUG", "ONN POST EXECUTE");
        parse();
    }
}

要尝试在可穿戴列表视图中显示标题,这是我对可穿戴列表视图适配器的代码,

private class MyAdapter extends WearableListView.Adapter {
    private final LayoutInflater inflater;

    public RSSParser rss;

    private MyAdapter(Context context) {
        inflater = LayoutInflater.from(context);
        rss = new RSSParser("http://feeds.bbci.co.uk/news/technology/rss.xml");
    }

    @Override
    public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new WearableListView.ViewHolder(inflater.inflate(R.layout.row_simple_item_layout, null));
    }

    @Override
    public void onBindViewHolder(WearableListView.ViewHolder holder, int position) {
        TextView view = (TextView) holder.itemView.findViewById(R.id.textView);
        view.setText(rss.getHeadlines().get(position).toString());
        holder.itemView.setTag(position);
    }

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

现在我得到的错误是有一个数组索引超出范围异常,我尝试将可穿戴列表项设置为rss解析器类中的数组,这行代码

 view.setText(rss.getHeadlines().get(position).toString());

任何帮助都将非常感谢,如果您需要了解该计划,请随时提出。我还在我的磨损清单中添加了使用互联网权限,因为所有代码都在应用程序的磨损分支中。

由于

0 个答案:

没有答案
相关问题