Android SDK AsyncTask doInBackground не запущен (подкласс)

По состоянию на 15 февраля 2012 г. мне еще предстоит найти ни хорошее объяснение, ни причину, почему это не работает. . Наиболее близким к решению является использование традиционного подхода Thread , но тогда зачем включать в Android SDK класс, который (кажется, не работает)?

Evenin 'SO!

У меня есть подкласс AsyncTask:

// ParseListener had a callback which was called when an item was parsed in a
// RSS-xml, but as stated further down it is not used at all right now.
private class xmlAsync extends AsyncTask implements ParseListener

Он выполняется следующим образом:

xmlAsync xmlThread = new xmlAsync();

xmlThread.execute("http://www.nothing.com");

Теперь в этом подклассе произошла небольшая ошибка. Раньше он выполнял некоторый xml-синтаксический анализ, но когда я заметил, что он doInBackground () не был вызван, я разделил его, строка за строкой, и в итоге получил только следующее:

@Override
protected Void doInBackground(String... params) 
{
    Log.v(TAG, "doInBackground");
        return null;
}

Что для некоторых причина, ничего не зарегистрировал. Однако я добавил следующее:

@Override
protected void onPreExecute() 
{
        Log.v(TAG, "onPreExecute");
        super.onPreExecute();
}

И эта строка действительно регистрируется при выполнении потока. Итак, каким-то образом вызывается onPreExecute (), но не doInBackground () . У меня одновременно работает еще одна AsyncTask в фоновом режиме, которая работает нормально.

В настоящее время я запускаю приложение на эмуляторе SDK версии 15, Eclipse, Mac OS X 10.7.2, недалеко от Северного полюса.

РЕДАКТИРОВАТЬ:

@Override
    protected void onProgressUpdate(RSSItem... values) {

        if(values[0] == null)
        {
                            // activity function which merely creates a dialog
            showInputError();
        }
        else
        {

            Log.v(TAG, "adding "+values[0].toString());
            _tableManager.addRSSItem(values[0]);
        }


        super.onProgressUpdate(values);
    }

_tableManager.addRSSItem () более или менее добавляет строку в базу данных SQLite, инициализированную контекстом действия. publishProgress () вызывается обратным вызовом Interface ParseListener. Однако, поскольку я даже не делаю ничего, кроме log.v в doInBackground (), я сначала счел это ненужным даже упоминать.

РЕДАКТИРОВАТЬ 2:

Хорошо, для ясности, это другая AsyncTask, выполняющаяся в том же действии и отлично работающая.

private class dbAsync extends AsyncTask
{
    Integer prevCount;
    boolean run;

    @Override
    protected void onPreExecute() {
        run = true;
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        run = true;
        prevCount = 0;

        while(run)
        {
            ArrayList items = _tableManager.getAllItems();

            if(items != null)
            {
                if(items.size() > prevCount)
                {
                    Log.v("db Thread", "Found new item(s)!");
                    prevCount = items.size();

                    RSSItem[] itemsArray = new RSSItem[items.size()];

                    publishProgress(items.toArray(itemsArray));
                }
            }               

            SystemClock.sleep(5000);
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(RSSItem... values) {

        ArrayList list = new ArrayList();

        for(int i = 0; i < values.length; i++)
        {
            list.add(i, values[i]);
        }

        setItemsAndUpdateList(list);

        super.onProgressUpdate(values);
    }

    @Override
    protected void onCancelled() {
        run = false;

        super.onCancelled();
    }
}

РЕДАКТИРОВАТЬ 3:

Вздох, извини, я не умею задавать вопросы. Но вот инициализация Задач.

xmlAsync _xmlParseThread;
dbAsync _dbLookup;

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

_dbLookup = new dbAsync();
_dbLookup.execute();

_xmlParseThread = new xmlAsync();       
_xmlParseThread.execute("http://www.nothing.com", null);
}

90
задан Community 23 May 2017 в 10:31
поделиться