Помогите с асинхронной задачей, вылетает при .execute () - PullRequest
0 голосов
/ 10 октября 2010

при выполнении моей задачи Async приложение полностью вылетает Вот код для класса. Он сидит внутри моего основного занятия. Я новичок в потоках, так что извините, если я сделал что-то смешное, лол, я не до конца понимаю.

EDIT:

    private class TeamSearchTask extends AsyncTask<String,Void,Void> {

    CharSequence nfo;
    String [] matches;
    protected Void doInBackground(String... teamNumber) 
    {
            //Team information ------------------------------------------------------------------------------------
            //Array of team data
            String [] data = APIconnection.getTeams(teamNumber[0], "");

            //Display basic team info
            nfo = ("\nFormal Team Name:\n" + data[1] + 
                    "\n\nLocation:\n" + data [3] + ", " + data[4] + ", " + data[5] +
                    "\n\nRookie Year:\n" + data[6] +
                    "\n\nRobot Name:\n" + data[7] +
                    "\n\nWebsite:\n" + data[8] + "\n\n\n\n\n\n\n\n\n"); 

            //Make match archive --------------------------------------------------------------------------------------

            String [] events = APIconnection.getEventIdsByYear(year1);
            String [] matches = new String [(events.length*11)];;

            for (int i = 0; i<events.length; i++)
            {
                matches[(i*11) + i] = APIconnection.getMatches2(teamNumber[0], events[i] ,"","")[i];            
            }
            return null;
    }

    protected void onProgressUpdate(Void...voids ) 
    {}

    protected void onPostExecute(Void result) {
        info.setText(nfo);
        matchArchive(matches);
    }
}

Ответы [ 2 ]

1 голос
/ 11 октября 2010
titlets.setText(ttl.toString());

Не трогайте элементы пользовательского интерфейса в другом потоке, чем в пользовательском. Вы можете использовать Activity :: runInUiThread (Runnable r) или Handler :: post (Runnable r). Во втором случае обработчик должен быть связан с UI-потоком.

0 голосов
/ 11 октября 2010
private class TeamSearchTask extends AsyncTask<String,Void,Void> {
    private String[] data;
    protected Void doInBackground(String... teamNumber) {
        // Do your background work! No UI-stuff here!!
        data = APIconnection.getTeams(teamNumber[0], "");

        return null;
    }
    protected void onPostExecute(Void result) {
        // Do all UI related stuff here, it's executed when the doInBackground is finished
    }
}

edit: My bad, исправил ошибку с помощью onPostExecute. Вам нужно использовать Void вместо Long при использовании

extends AsyncTask<String,Void,Void>

, что означает, что входным параметром является String, тип параметра Progress (в onProgressUpdate), а третий - для Result.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...