TexxTyRe
@TexxTyRe
Software Developer

Как вывести результат AsyncTask во втором Activity?

Я новичок. Использую Jsoup для парсинга страницы (пока что пытаюсь просто вытащить №группы) и AsyncTask для разделение потоков, парсить придется достаточно. У меня есть 2 Activity и к ним 2 класса. Один класс наследует от другого (правильно ли так делать?). Внутри одного класса есть еще один, который наследуется как раз таки от AsyncTask. Тут у меня сравнивается введенная пользователем группы с имеющимися данными в массиве (это я так понимаю сделать лучше в отдельном потоке при нажатии?), после выдает результат (ту же группу и выдает) во втором Activity (Это выдает нормально). А AsyncTask подключается к странице, ищет тег с классом и должен передать текст во второй активити. Что не так? Читал как пользоваться AsyncTask, onPostExecute - поток UI, для обращения к элементам; doInBackground - отдельный поток для выполнения сложной операции. Скидываю именно этот класс:
public class SearchGroup extends MainActivity implements TextWatcher {
        private AutoCompleteTextView group;
        protected String[] spisokGrp = {"ИВ-14-1", "ИВ-14-2", "ИВ-14-21", "ИВ-201", "ИВ-202",
                "ИВ-301", "ИВ-302", "ИВ-401", "ИВ-402", "ИП-14-22", "ИП-14-3", "ИП-14-4", "ИП-203",
                "ИП-204", "ИП-303", "ИП-304", "ИП-312", "ИП-403", "ИП-404", "ИП-411", "РА-14-5", "РА-14-6",
                "РА-205", "РА-305", "РА-314", "РА-405", "РА-414", "РЭ-14-7С", "СР-14-12", "СР-14-13",
                "СР-208", "СР-308", "СР-408", "ТМ-14-9", "ТМ-206", "ТМ-306", "ТМ-406", "ТО-14-8", "ТО-210", "ТО-310",
                "ТО-410", "УД-14-11", "УД-211", "УД-213К", "УК-14-10", "УК-207", "УК-307", "УК-311", "УК-407",
                "ЭЭ-14-23", "ЭЭ-313", "ЮС-14-14", "ЮС-14-15К", "ЮС-14-16К", "ЮС-209", "ЮС-212К", "ЮС-309"};
        protected Intent intent;
        private String groupName;
        private searchGroup sG =new searchGroup();;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.srchgroup);
            group = (AutoCompleteTextView) findViewById(R.id.editText);
            group.addTextChangedListener(this);
            group.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, spisokGrp));
            /**button.setOnClickListener(this);*/
        }
        class searchGroup extends AsyncTask<Void, Void, String> {
            @Override
            protected String doInBackground(Void... params) {
                groupName = group.getText().toString().toUpperCase();
                Document doc = null;
                Elements nameGrp;
                try {
                    doc = Jsoup.connect("http://pkgh.edu.ru/obuchenie/shedule-of-classes.html").get();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (doc != null) {
                    nameGrp = doc.select("h4.expanded");
                    return nameGrp.text();
                }
                return null;
            }
            protected void onPostExecute(String result) {
                intent.putExtra("nameGroup", result);
            }
        }
        public void click(View view) {
            int i;
            boolean bool;
            sG.execute();
            groupName = group.getText().toString().toUpperCase();
            intent = new Intent(this, MainActivity.class);
            bool = false;
            do {
                for (i = 0; i < spisokGrp.length; i++) {
                    if (groupName.equals(spisokGrp[i])) {
                        groupName = spisokGrp[i];
                        bool = true;
                        intent.putExtra("group", groupName);
                        startActivity(intent);
                    } else {
                        Toast.makeText(this, "Неверный ввод", Toast.LENGTH_SHORT).show();
                        bool = true;
                    }
                }
            } while (!bool);
        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
        }
    }
  • Вопрос задан
  • 1389 просмотров
Пригласить эксперта
Ответы на вопрос 3
Dit81
@Dit81
Security researcher, pentester, internet-marketer
Может лучше так написать?
protected void onPostExecute(String result) {
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra("nameGroup", result);
}
Ответ написан
Комментировать
@IceJOKER
Web/Android developer
Лень читать ваш код, но объясню принцип:
Объявляете интерфейс с методом taskCompleted(ResultType result());

Создаете класс MyAsyncTask (наследник от AsyncTask), добавляете поле для интерфейса:
private onTaskCompleted task;
добавляете конструктор, где принимаете активити(должен реализовать выше созданные интерфейс) и приводите к типу интерфейса:
task = (onTaskCompleted) activity;

в onPostExecution:
task.taskCompleted(result);
Ответ написан
@z0rgoyok
Текст в активити передавать не стоит, следует использовать базу данных, можете попробовать ActiveAndroid.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы