Мой проект, на который я потратил почти 40 часов, почти завершен, но у меня есть еще одна задача.Моя предыдущая проблема заключалась в том, что когда пользователи нажимали, чтобы открыть новостную ленту RSS, это приложение иногда зависало, потому что оно одновременно пыталось загрузить активность и ленту новостей.Это было решено с помощью asynctask.
Теперь, кроме этого, у меня есть четыре кнопки, которые переключаются между различными каналами и, по сути, просто изменяют вид.Это исключает перезагрузку экрана или новые действия.Что ж, когда я изначально запускаю это действие, asynctask работает точно так, как я хочу, но это не так просто, как копирование вставки в каждое из представлений внизу.Как мне реализовать asynctask под каждой из этих разных кнопок / видов.Вы увидите onClick внизу.
Вот раздел асинхронной задачи.
public class RssLoadingTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
displayRss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
preReadRss();
}
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
//super.onProgressUpdate(values);
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
readRss();
return null;
}
}
А ниже здесь раздел onClick.Очевидно, что с учетом вышесказанного каждый readRss, preReadRSS и т. Д. Находится в нужных местах в начальном упражнении, но почему Java не позволяет мне размещать эти же асинхронные задачи в разделе onClick?Я просто не знаю достаточно о модификаторах, чтобы знать, как их разместить.Все еще многому учусь.
public void onClick (View v) {
if (v == hawknation) {
try {
URL rssUrl = new URL("http://www.rss.com/feed");
SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
XMLReader myXMLReader = mySAXParser.getXMLReader();
RSSHandler myRSSHandler = new RSSHandler();
myXMLReader.setContentHandler(myRSSHandler);
InputSource myInputSource = new InputSource(rssUrl.openStream());
myXMLReader.parse(myInputSource);
myRssFeed = myRSSHandler.getFeed();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
{
if (myRssFeed!=null)
{
TextView feedTitle = (TextView)findViewById(R.id.feedtitle);
TextView feedDescribtion = (TextView)findViewById(R.id.feeddescribtion);
TextView feedPubdate = (TextView)findViewById(R.id.feedpubDate);
TextView feedLink = (TextView)findViewById(R.id.feedlink);
feedTitle.setText(myRssFeed.getTitle());
feedDescribtion.setText(myRssFeed.getDescription());
feedPubdate.setText(myRssFeed.getPubdate());
feedLink.setText(myRssFeed.getLink());
MyCustomAdapter adapter =
new MyCustomAdapter(this, R.layout.row, myRssFeed.getList());
setListAdapter(adapter);
}
}