试图在异步任务中解析的java.lang.StackOverflower错误

试图在异步任务中解析的java.lang.StackOverflower错误,java,android,parsing,android-asynctask,Java,Android,Parsing,Android Asynctask,。在上一个问题中,我问了如何在异步任务中使用AndroidSaxParser。所以这个问题没有很好的答案,这对我来说很有效,我曾经尝试过一些东西。正如标题所说,我的LogCat抛出了一个错误,我不知道如何修复,因为我已经尝试了很多方法,最终没有出现任何语法错误 我的活动代码: package org.developerworks.android; import java.util.ArrayList; import java.util.List; import android.app.Lis

。在上一个问题中,我问了如何在
异步任务中使用
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);
        }
    }
}
package org.developerworks.android;
导入java.util.ArrayList;
导入java.util.List;
导入android.app.ListActivity;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
公共类MessageList扩展了ListActivity
{
私人列表消息;
DownloadWebPagetTask=新建DownloadWebPagetTask();
@凌驾
创建公共空间(捆绑冰柱)
{
超级冰柱;
setContentView(R.layout.main);
task.execute();
//loadFeed(ParserType.ANDROID_-SAX);
}
@凌驾
公共布尔onCreateOptions菜单(菜单)
{
super.onCreateOptions菜单(菜单);
添加(menu.NONE、ParserType.ANDROID_SAX.ordinal()、ParserType.ANDROID_SAX.ordinal()、R.string.ANDROID_SAX);
添加(menu.NONE、ParserType.SAX.ordinal()、ParserType.SAX.ordinal()、R.string.SAX);
添加(menu.NONE、ParserType.DOM.ordinal()、ParserType.DOM.ordinal()、R.string.DOM);
添加(menu.NONE、ParserType.XML_PULL.ordinal()、ParserType.XML_PULL.ordinal()、R.string.PULL);
返回true;
}
@抑制警告(“未选中”)
@凌驾
公共布尔值onMenuItemSelected(int-featureId,MenuItem项)
{
super.onMenuItemSelected(featureId,item);
ParserType type=ParserType.values()[item.getItemId()];
ArrayAdapter=(ArrayAdapter)this.getListAdapter();
if(适配器!=null)
{
if(adapter.getCount()>0)
{
适配器。清除();
}
}
task.execute();
//此.loadFeed(类型);
返回true;
}
@凌驾
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id)
{
super.onListItemClick(左、右、位置、id);
Intent viewMessage=newintent(Intent.ACTION_视图,Uri.parse(messages.get(position.getLink().toExternalForm());
此.startActivity(viewMessage);
}
私有void加载源(ParserType类型)
{
尝试
{
Log.i(“AndroidNews”、“ParserType=“+type.name());
FeedParser=FeedParserFactory.getParser(类型);
messages=parser.parse();
列表标题=新的ArrayList(messages.size());
用于(消息消息:消息)
{
titles.add(msg.getTitle());
}
ArrayAdapter=新的ArrayAdapter(此,R.layout.row,标题);
这个.setListAdapter(适配器);
}
捕获(可丢弃的t)
{
Log.e(“AndroidNews”,t.getMessage(),t);
}
}
私有类下载WebPagetTask扩展异步任务
{
MessageList msgl=新建MessageList();
@凌驾
受保护列表doInBackground(列表…URL)
{
FeedParser=FeedParserFactory.getParser(ParserType.ANDROID_-SAX);
messages=parser.parse();
列表标题=新的ArrayList(messages.size());
用于(消息消息:消息)
{
titles.add(msg.getTitle());
}
返回标题;
}
@凌驾
受保护的void onPostExecute(列表结果)
{
ArrayAdapter=新的ArrayAdapter(msgl,R.layout.row,result);
msgl.setListAdapter(适配器);
}
}
}
这就是它抛出的错误:


由于DownloadWebGetTask创建了一个新的MessageList,该MessageList创建了一个新的DownloadWebGetTask,该MessageList创建了一个新的DownloadWebGetAsk,该MessageList创建了一个新的DownloadWebGetTask,因此引发了SOER错误。。。诸如此类。

谢谢您提供的信息,我可以解决我的问题。我使用了
MessageList.this
而不是
msgl