Используйте другой метод Asynctask класса (Instance)

Я хочу использовать метод Asyntask, который собирает поле вопросов и отображает их в listview, этот метод называется `AsyncRefrescar. У меня есть другой класс, где я хочу реализовать этот метод, и я делаю это следующим образом

VerPreguntas verPreguntas = new VerPreguntas();
verPreguntas.AsyncRefrescar().execute();

, однако это помечает меня , см. Вопросы в красном.

Метод Asyntask заключается в следующем

public class AsyncRefrescar extends AsyncTask<String, String, String> {

    ProgressDialog pdLoading = new ProgressDialog(VerPreguntas.this);
    HttpURLConnection conn;
    URL url = null;

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

    @Override
    protected String doInBackground(String... params) {
        try {
            url = new URL("http://bdauditorio.esy.es/Verpregunta/mostrarpre.php");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return e.toString();
        }
        try {
            conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(READ_TIMEOUT);
            conn.setConnectTimeout(CONNECTION_TIMEOUT);
            conn.setRequestMethod("GET");

            conn.setDoOutput(true);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            return e1.toString();
        }

        try {
            int response_code = conn.getResponseCode();

            if (response_code == HttpURLConnection.HTTP_OK) {

                InputStream input = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                StringBuilder result = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }

                return (result.toString());
            } else {
                return ("unsuccessful");
            }

        } catch (IOException e) {
            e.printStackTrace();
            return e.toString();
        } finally {
            conn.disconnect();
        }
    }

    @Override
    protected void onPostExecute(String result) {
        if (result.equals("unsuccessful")) {
            final AlertDialog.Builder alertaDeError = new AlertDialog.Builder(VerPreguntas.this);
            alertaDeError.setTitle("Error");
            alertaDeError.setMessage("Ups, no se han podido cargar las preguntas. Intentelo de nuevo.");
            alertaDeError.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
            alertaDeError.create();
            alertaDeError.show();
        } else {
            //Existen Datos
            List<String> preguntas = new ArrayList<String>();

            //Parsea la respuesta obtenida por el Asynctask
            JSONArray jsonArray = null;
            try {
                jsonArray = new JSONArray(result);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject preguntaDatos = null;
                try {
                    preguntaDatos = jsonArray.getJSONObject(i);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                String pregunta = null;
                try {
                    pregunta = preguntaDatos.getString("pregunta");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                preguntas.add(pregunta);
            }
            //crear el Adapter.
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(VerPreguntas.this,
                    android.R.layout.simple_list_item_1, preguntas);
            //Asignas el Adapter a tu ListView para mostrar los datos.
            mostrarr.setAdapter(adapter);
            ///
        }
    }
}

Я подумал, что, возможно, дилемма Listview, поэтому я поставил одинаковый Id в обоих XML

0
задан 10.04.2017, 02:07
0 ответов

Если это то, что я думаю, ты не звонишь хорошо AsyncTask, так как, чтобы звонить в AsyncTask ты должен делать это следующей формой:

AsyncRefrescar task = new AsyncRefrescar();
task.execute(n);

Здесь у тебя есть документация

А это это ты будешь должен подробно описывать немного больше код класса VerPreguntas и метод AsyncRefrescar()

1
ответ дан 03.12.2019, 17:52

В этом случае не могут, твоя переменная mostrarr его один listview я представляю себе, ты пробуешь соглашаться на визуальные элементы одной Activity с другой и это не правильно.

Если ты хочешь получить те же данные, которых получает твое асинхронное задание, ты можешь делать ее снова в твоей другой Activity, в существо асинхронное задание невозможно давать ему стоимость возврата.

Относительно тех id listView он ни на что не повлияет. Внутри тебя Activity1 существует так называемая переменная mostrarr что ссылается в layout свойственный счастью Activity. Во втором layout ты должен создавать также переменную, которая ссылалась бы на объект ListView и загружать информацию, которую ты получаешь с твоим асинхронным методом ссылаясь на этот.

0
ответ дан 03.12.2019, 17:52

Как называние Asynctask с другого класса.

Самая простая форма просто определяя класс, как он печатает в файле

public class AsyncRefrescar extends AsyncTask<String, String, String> {

и просто инстанция класс:

AsyncRefrescar task = new AsyncRefrescar ();
task.execute();

Другая форма - создавая в файле класс определяя ее как abstract class

abstract class AsyncRefrescar extends AsyncTask<String, String, String> {

и внутри класса, что ты выполнил бы Asynctask, верь в класс, который он увеличивает твоего класса:

private class MyAsync extends AsyncRefrescar {

    }

таким образом, просто назови Asynctask и он будет работать без проблем:

new MyAsync().execute();

В случае твоего вопроса твоего Asynctask, реализуй изменения в UI.

Следовательно лучшее состоит в том, чтобы добавлять класс внутри твоего Activity, так как ты считаешь элементы твоим listView по отношению к, который ты конфигурируешь Adapter с результатами.

...
...
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(VerPreguntas.this,
                android.R.layout.simple_list_item_1, preguntas);
        //Asignas el Adapter a tu ListView para mostrar los datos.
        mostrarr.setAdapter(adapter);
...
...

таким образом, если удерживается класс Asynctask в том же самом Activity ты можешь звонить без проблемы этой формы Asynctask:

new AsyncRefrescar().execute();

0
ответ дан 03.12.2019, 17:52

Ты можешь пробовать следующее:

В твой класс VerPreguntas поверьте публичный метод, чтобы возвращать инстанцию AsyncRefrescar:

public AsyncRefrescar getAsyncRefrescar(){
     return new AsyncRefrescar();
}

В классе, где ты хочешь использовать твой AsyncRefrescar, ты делаешь следующее:

VerPreguntas verPreguntas = new VerPreguntas();
AsyncRefrescar asynRefrescar = verPreguntas.getAsyncRefrescar();
asynRefrescar.execute();

Оставь твой AsyncTask со следующими параметрами:

 public class AsyncRefrescar extends AsyncTask<Void, String, String> {

Заяви в метод doInBackground

 @Override
 protected String doInBackground(Void... params) {
-1
ответ дан 03.12.2019, 17:52

Теги

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