在Android中使用TextView获取RSS提要行项目的值

在Android中使用TextView获取RSS提要行项目的值,android,android-intent,rss,Android,Android Intent,Rss,我正在尝试构建一个Android应用程序,它可以显示几个RSS提要,我想只显示标题和日期的RSS提要,然后让用户点击它们来查看完整的故事。目前,我正在将RSS行值作为其行文本视图中的意图附加项传递。然而,我不能没有故事文本视图,但仍然可以将这些数据作为额外的意图传递。以下是我代码的相关部分: public class RSSFeedView extends ListActivity implements OnItemClickListener { Intent intent; private S

我正在尝试构建一个Android应用程序,它可以显示几个RSS提要,我想只显示标题和日期的RSS提要,然后让用户点击它们来查看完整的故事。目前,我正在将RSS行值作为其行文本视图中的意图附加项传递。然而,我不能没有故事文本视图,但仍然可以将这些数据作为额外的意图传递。以下是我代码的相关部分:

public class RSSFeedView extends ListActivity implements OnItemClickListener
{
Intent intent;
private String thread;

private RSSFeed feed = null;
RSSHandler rh = new RSSHandler();
private MyRowAdapter myRowAdapter;
private ArrayList<RSSItem> items;
private final static String TAG = "MAD Assignment";
public String description;

private ProgressDialog pbarDialog;

/** Called when the activity is first created */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    intent = getIntent();
    thread = intent.getStringExtra("thread");

    StrictMode.setThreadPolicy(
    new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork()   
    // or .detectAll() for all detectable 
                .penaltyLog().build());

    items = new ArrayList<RSSItem>();
    myRowAdapter = new MyRowAdapter(this);
    setListAdapter(myRowAdapter);

    new DownloadFilesTask().execute(thread);
}


class MyRowAdapter extends ArrayAdapter<RSSItem>
{
    Activity context;

    MyRowAdapter (Activity context)
    {
        super(context, R.layout.rss, items);
        this.context=context;
    }

    public View getView(final int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        if(row == null)
        {
            LayoutInflater inflater = context.getLayoutInflater();
            row = inflater.inflate(R.layout.rss, null);
        }

        RSSItem _item = items.get(position);

        TextView title = (TextView)row.findViewById(R.id.rssTitle);
        title.setText(_item.getTitle());
        **TextView feed = (TextView)row.findViewById(R.id.itemlist);
        feed.setText(_item.getDescription());**
        //description = _item.getDescription();    TRY TO GET IT WORKING WITH JUST DATE AND TITLE!!!!!!!!
        TextView date = (TextView)row.findViewById(R.id.rssDate);
        String dateStr = ConvertToDate(_item.getPubDate());
        date.setText(dateStr);

        row.setOnClickListener(new OnItemClickListener(position));

        return (row);
    }
}

@Override
public boolean onCreateOptionsMenu (Menu menu)
{
    new MenuInflater(getApplication()).inflate(R.menu.rss_menu, menu);
    return (super.onCreateOptionsMenu(menu));
}

@Override
public boolean onOptionsItemSelected (MenuItem item)
{
    switch (item.getItemId())
    {
        case R.id.rss1:
            new DownloadFilesTask().execute(thread);
            break;
    }
    return super.onOptionsItemSelected(item);
}

private class DownloadFilesTask extends AsyncTask<String, Integer, RSSFeed>
{
    @Override
    protected RSSFeed doInBackground(String... urls)
    {
        // TODO Auto-generated method stub
        feed = new RSSFeed();
        try
        {
            feed = getFeed (urls[0]);
        }
        catch (Exception e)
        {
            feed = null;
        }
        return feed;
    }

    @Override
    protected void onCancelled()
    {
        // TODO Auto-generated method stub
        super.onCancelled();
    }

    @Override
    protected void onPostExecute(RSSFeed _feed)
    {
        // TODO Auto-generated method stub
        super.onPostExecute(_feed);
        if (_feed!=null)
        {
            hideProgressBar();
            Log.v(TAG,"onPostExecute");
            for (RSSItem _item : _feed.getAllItems())
            {
                // needed as items have to be explicitly added
                // for notifyDataSetChanged to work
                items.add(_item);
            }
            myRowAdapter.notifyDataSetChanged();
        }
        else
        {
            showError();
        }
    }

    @Override
    protected void onPreExecute()
    {
        // TODO Auto-generated method stub
        super.onPreExecute();
        showProgressBar();
    }

    @Override
    protected void onProgressUpdate(Integer... values)
    {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
    }
}


private RSSFeed getFeed (String urlToRssFeed)
{
    try
    {
        URL url = new URL(urlToRssFeed);
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();

        XMLReader xmlreader = parser.getXMLReader();
        RSSHandler theRssHandler = new RSSHandler();

        xmlreader.setContentHandler(theRssHandler);
        InputSource is = new InputSource(url.openStream());
        xmlreader.parse(is);
        return theRssHandler.getFeed();
    }
    catch (Exception e)
    {
        return null;
    }
}

private class OnItemClickListener implements OnClickListener
{
   private int mPosition;

    OnItemClickListener(int position)
    {
            mPosition = position;
    }


    @Override
    public void onClick(View row) 
    {
        // TODO Auto-generated method stub
        final String title = (String) ((TextView) row.findViewById(R.id.rssTitle)).getText();
        final String date = (String) ((TextView) row.findViewById(R.id.rssDate)).getText();
        **final String desc = (String) ((TextView) row.findViewById(R.id.itemlist)).getText();**
        //final String desc = description;

        Intent showDetailedIntent = new Intent(RSSFeedView.this, RSSDetailed.class);

        showDetailedIntent.putExtra("title", title);
        showDetailedIntent.putExtra("date", date);
        showDetailedIntent.putExtra("desc", desc);

        startActivity(showDetailedIntent);
    }
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
{
    // TODO Auto-generated method stub

}


}
public类RSSFeedView扩展了ListActivity实现的ListListener
{
意图;
私有字符串线程;
专用RSSFeed feed=null;
RSSHandler rh=新的RSSHandler();
私有MyRowAdapter MyRowAdapter;
私有ArrayList项;
私有最终静态字符串TAG=“MAD赋值”;
公共字符串描述;
私有进程日志;
/**首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
intent=getIntent();
线程=intent.getStringExtra(“线程”);
StrictMode.setThreadPolicy(
新StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork()
//或.detectTall()用于所有可检测的
.penaltyLog().build());
items=newarraylist();
myRowAdapter=新的myRowAdapter(此);
setListAdapter(myRowAdapter);
新的下载文件任务().execute(线程);
}
类MyRowAdapter扩展了ArrayAdapter
{
活动语境;
MyRowAdapter(活动上下文)
{
super(context,R.layout.rss,items);
this.context=context;
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
if(行==null)
{
LayoutInflater充气器=上下文。getLayoutInflater();
row=充气机。充气(R.layout.rss,空);
}
RSSItem\u item=items.get(位置);
TextView title=(TextView)row.findViewById(R.id.rstitle);
title.setText(_item.getTitle());
**TextView提要=(TextView)row.findViewById(R.id.itemlist);
feed.setText(_item.getDescription())**
//description=_item.getDescription();尝试使用日期和标题!!!!!!!!
TextView日期=(TextView)row.findViewById(R.id.rssDate);
字符串dateStr=ConvertToDate(_item.getPubDate());
date.setText(dateStr);
row.setOnClickListener(新的McClickListener(位置));
返回(行);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单)
{
新菜单充气器(getApplication())。充气(R.menu.rss_menu,menu);
返回(super.oncreateoptions菜单(menu));
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项)
{
开关(item.getItemId())
{
案例R.id.rss1:
新的下载文件任务().execute(线程);
打破
}
返回super.onOptionsItemSelected(项目);
}
私有类DownloadFilesTask扩展了AsyncTask
{
@凌驾
受保护的RSSFeed doInBackground(字符串…URL)
{
//TODO自动生成的方法存根
feed=新的RSSFeed();
尝试
{
feed=getFeed(URL[0]);
}
捕获(例外e)
{
feed=null;
}
回馈;
}
@凌驾
受保护的void onCancelled()
{
//TODO自动生成的方法存根
super.onCancelled();
}
@凌驾
PostExecute上受保护的void(RSSFeed\u feed)
{
//TODO自动生成的方法存根
super.onPostExecute(_提要);
如果(_feed!=null)
{
hideProgressBar();
Log.v(标记“onPostExecute”);
对于(RSSItem\u项:\u feed.getAllItems())
{
//必须明确添加必需的as项
//对于NotifyDataSetChange,请更改为工作
项目。添加(_项目);
}
myRowAdapter.notifyDataSetChanged();
}
其他的
{
淋浴器();
}
}
@凌驾
受保护的void onPreExecute()
{
//TODO自动生成的方法存根
super.onPreExecute();
showProgressBar();
}
@凌驾
受保护的void onProgressUpdate(整型…值)
{
//TODO自动生成的方法存根
super.onProgressUpdate(值);
}
}
私有RSSFeed getFeed(字符串urlToRssFeed)
{
尝试
{
URL=新URL(urlToRssFeed);
SAXParserFactory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
XMLReader=parser.getXMLReader();
RSSHandler-theRssHandler=新的RSSHandler();
setContentHandler(ThersHandler);
InputSource is=新的InputSource(url.openStream());
parse(is);
返回theRssHandler.getFeed();
}
捕获(例外e)
{
返回null;
}
}
私有类OnItemClickListener实现OnClickListener
{
私人投资;
OnItemClickListener(内部位置)
{
位置=位置;
}
@凌驾
公共void onClick(查看行)
{
//TODO自动生成的方法存根
最终字符串标题=(字符串)((TextView)row.findViewById(R.id.rstitle)).getText();
最终字符串日期=(字符串)((TextView)row.findViewById(R.id.rssDate)).getText();
**最终字符串desc=(字符串)((TextView)row.findViewById(R.id.itemlist)).getText()**
//最终字符串desc=描述;
Intent showDetailedIntent=新意图(RSSFeedView.this、RSSDetailed.class);
显示详细内容putExtra(“标题”,标题);
显示详细内容putExtra(“日期”,日期);
显示详细内容putExtra(“描述”,描述);
StartTactivity(显示详细内容);
}
}
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3)
{
//TODO自动生成的方法存根
}
}

public View getView(final int position, View convertView, ViewGroup parent) { row.setOnClickListener(new OnItemClickListener(position, _item)); } private class OnItemClickListener implements OnClickListener { private int mPosition; private RSSItem mItem; OnItemClickListener(int position, RSSItem item) { mPosition = position; mItem = item; } @Override public void onClick(View row) { final String title = mItem.getTitle(); final String desc = mItem.getDescription(); // etc.. } }