Наполнять listview с Asynctask посредством метода GET

тема состоит в том, что у меня есть класс, где я получаю данные с MYSQL коммуникация между PHP и основанием, функционирует (бедное с postman). Проблема - что не, как присоединение LISTVIEW для того, чтобы он показал данные.

 private class AsyncRetrieve extends AsyncTask<String, String, String> {
    ProgressDialog pdLoading = new ProgressDialog(VerPreguntas.this);
    HttpURLConnection conn;
    URL url = null;

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

        pdLoading.setMessage("\tLoading...");
        pdLoading.setCancelable(false);
        pdLoading.show();

    }


    @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) {

        pdLoading.dismiss();
        if(result.equals("")) {
          mostrar.setText(result.toString());
        }else{
            // you to understand error returned from doInBackground method
            Toast.makeText(VerPreguntas.this, result.toString(), Toast.LENGTH_LONG).show();

        }

    }

}

я понимаю, что это включение будет в onPostExecute Привет!

0
задан 22.04.2017, 00:31
2 ответа

Поскольку это Listview нормальный, ты можешь делать:

, Поскольку ты получаешь договоренность Json, первое состоит в том, чтобы получать этот array в одном JSONArray, после давайте верить в один ArrayList из типа String, так как мы только будем показывать стоимость вопроса. И после мы пробегаем этот JSONArray и добавляем в наш ArrayList стоимость вопроса. В конце концов seteamos ArrayAdapter в Listview

try{
    ArrayList<String> listaPreguntas = new ArrayList<String>();
    JSONArray jArray = new JSONArray(result.toString());
    for(int i=0;i<(jArray.length());i++){
        JSONObject json_obj = jArray.getJSONObject(i);
        String pregunta = json_obj.getString("pregunta");
        listaPreguntas.add(pregunta);
        Context context = TuActivity.this;
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,  listaPreguntas);
        listView.setAdapter(adapter); 
    }
}catch(JSONException e){
   System.out.println(e.printStackTrace());
}
0
ответ дан 24.11.2019, 11:58
  • 1
    Этот irí в в onPostExecute, он не así? – Ashley G. 20.12.2016, 03:10
  • 2
    Точный! @FelixBeeb – sioesi 20.12.2016, 03:12
  • 3
    Не может решать класс строитель arrayAdapter:/ – Ashley G. 20.12.2016, 03:19
  • 4
    Он из-за this, ты должен помещать, как эта внутри асинхронного задания у тебя должен быть это Context context = tuactivity.this; – sioesi 20.12.2016, 03:20
  • 5
    Если я понимаю точку jaja и спасибо снова, я прощаюсь, привет! – Ashley G. 20.12.2016, 03:50

Когда ты заканчиваешься AsyncTask, ты получаешь ответ

 @Override
    protected void onPostExecute(String result) {

        pdLoading.dismiss();
        if(result.equals("")) {
          mostrar.setText(result.toString());
        }else{
            // you to understand error returned from doInBackground method
            Toast.makeText(VerPreguntas.this, result.toString(), Toast.LENGTH_LONG).show();

        }

    }

которая как ты комментируешь, является json, если мы проверяем структуру, его один JsonArray у которого есть следующая структура:

introducir la descripción de la imagen aquí

У тебя будет этот ответ, что parsear, чтобы получать стоимость, которую ты желаешь, в этом случае вопрос, но ты должен хранить этот вопрос в arraylist, чтобы питать твой adapter:

    List<String> preguntas = new ArrayList<String>();
    try {
    JSONArray jsonArray = new JSONArray(respuesta); 
    for (int i=0; i<jsonArray.length(); i++) {
        JSONObject preguntaDatos = jsonArray.getJSONObject(i);
        String pregunta = preguntaDatos.getString("pregunta");
        preguntas.add(pregunta);
    }
    } catch (JSONException e) {
         e.printStackTrace();
    }

Чтобы показывать данные ты должен создавать один Adapter с которым ты наполнишь ListView:

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

Сейчас мы интегрируем весь код в метод onPostExecute(), процесс состоит в том, чтобы получать ответ (result) оценивать, если он содержит данные, если это так parsea конвертируя сначала в JSONArray и ты хранишь вопросы в ArrayList, когда ты имеешь ArrayList ты создаешь один Adapter и в конце концов ты распределяешь этот Adapter в тебя ListView :

@Override
    protected void onPostExecute(String result) {

        pdLoading.dismiss();
        if(result.equals("")) {  //No hay datos
          mostrar.setText(result.toString());
        }else{ //Existen Datos

    List<String> preguntas = new ArrayList<String>();

       //Parsea la respuesta obtenida por el Asynctask
       try {
       JSONArray jsonArray = new JSONArray(result); 
          for (int i=0; i<jsonArray.length(); i++) {
              JSONObject preguntaDatos = jsonArray.getJSONObject(i);
              String pregunta = preguntaDatos.getString("pregunta");
              preguntas.add(pregunta);
          }
       } catch (JSONException e) {
          e.printStackTrace();
       }

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

            // you to understand error returned from doInBackground method
            Toast.makeText(VerPreguntas.this, result.toString(), Toast.LENGTH_LONG).show();

        }

    }
1
ответ дан 24.11.2019, 11:58
  • 1
    Благодаря всем, оно функционировало! – Ashley G. 20.12.2016, 03:41
  • 2
    @FelixBeeb превосходный Феликс! – Jorgesys♦ 20.12.2016, 03:42
  • 3
    Ло ú nico, что не было в твоего có я говорю, что состоят в том, чтобы добавлять Try, если не dará ошибка. Спасибо за помощь и время. привет! – Ashley G. 20.12.2016, 03:44
  • 4
    @FelixBeeb уже будь готов, ahh ты лишил меня ответа! = | – Jorgesys♦ 20.12.2016, 03:48
  • 5
    Снова спасибо! – Ashley G. 20.12.2016, 03:49