[英]java.lang.StackOverflowError trying to parse in a AsyncTask
上一個問題 。 在上一個問題中,我詢問了如何在AsyncTask
使用AndroidSaxParser
。 因此,該問題沒有一個對我有用的好的答案,我嘗試了一些嘗試。 如標題所示,我的LogCat
拋出錯誤,並且我不知道該如何解決,因為我嘗試了很多事情,最終沒有遇到任何語法錯誤。
我的活動代碼:
package org.developerworks.android;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MessageList extends ListActivity
{
private List<Message> messages;
DownloadWebPageTask task = new DownloadWebPageTask();
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
task.execute();
// loadFeed(ParserType.ANDROID_SAX);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, ParserType.ANDROID_SAX.ordinal(), ParserType.ANDROID_SAX.ordinal(), R.string.android_sax);
menu.add(Menu.NONE, ParserType.SAX.ordinal(), ParserType.SAX.ordinal(), R.string.sax);
menu.add(Menu.NONE, ParserType.DOM.ordinal(), ParserType.DOM.ordinal(), R.string.dom);
menu.add(Menu.NONE, ParserType.XML_PULL.ordinal(), ParserType.XML_PULL.ordinal(), R.string.pull);
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
super.onMenuItemSelected(featureId, item);
ParserType type = ParserType.values()[item.getItemId()];
ArrayAdapter<String> adapter = (ArrayAdapter<String>) this.getListAdapter();
if (adapter != null)
{
if (adapter.getCount() > 0)
{
adapter.clear();
}
}
task.execute();
// this.loadFeed(type);
return true;
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
Intent viewMessage = new Intent(Intent.ACTION_VIEW, Uri.parse(messages.get(position).getLink().toExternalForm()));
this.startActivity(viewMessage);
}
private void loadFeed(ParserType type)
{
try
{
Log.i("AndroidNews", "ParserType=" + type.name());
FeedParser parser = FeedParserFactory.getParser(type);
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
for (Message msg : messages)
{
titles.add(msg.getTitle());
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.row, titles);
this.setListAdapter(adapter);
}
catch (Throwable t)
{
Log.e("AndroidNews", t.getMessage(), t);
}
}
private class DownloadWebPageTask extends AsyncTask<List<String>, Void, List<String>>
{
MessageList msgl = new MessageList();
@Override
protected List<String> doInBackground(List<String>... urls)
{
FeedParser parser = FeedParserFactory.getParser(ParserType.ANDROID_SAX);
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
for (Message msg : messages)
{
titles.add(msg.getTitle());
}
return titles;
}
@Override
protected void onPostExecute(List<String> result)
{
ArrayAdapter<String> adapter = new ArrayAdapter<String>(msgl, R.layout.row, result);
msgl.setListAdapter(adapter);
}
}
}
這是它引發的錯誤:
之所以引發SOError,是因為DownloadWebPageTask創建了一個新的MessageList,該消息列表又創建了一個新的DownloadWebPageTask,又創建了一個新的MessageList,該消息創建了一個新的DownloadWebPageTask,又創建了一個新的MessageList,創建了一個新的DownloadWebPageTask ...,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.