Trying to load php info into Spinner with Json

I want that this class load spinners from information in my server. I dont do this code, and because of this, i dont understand how works and why it crash. With System.out.println i discover that it crash at line with the comment “Falla aqui”. If Someone see something wrong , help me please ­čÖé
Thanks and sorry if my english is bad.

———– my code

public class FiltroCentros extends ActionBarActivity {
private ProgressDialog pdia;
private int llamadas = 0;
private boolean negarSp = true;
private boolean inicio = true;

private String[] itemsProvincias;
private String[] itemsEspecialidades;
private String[] itemsProvisionales;
private ModeloProvincias[] cambiador;

private LinearLayout llCargado;
private LinearLayout llCancelado;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_filtro_centros);

    if (savedInstanceState == null) {

        iniciarActividad();

    } else {

        /** Recupero los datos del estado vertical. **/
        this.llamadas = savedInstanceState.getInt("llamadas");
        this.itemsProvincias = savedInstanceState
                .getStringArray("itemsProvincias");
        this.itemsProvisionales = savedInstanceState
                .getStringArray("itemsProvisionales");
        this.itemsEspecialidades = savedInstanceState
                .getStringArray("itemsEspecialidades");
        this.cambiador = (ModeloProvincias[]) savedInstanceState
                .getParcelableArray("cambiador");

        this.inicio = savedInstanceState.getBoolean("inicio");

        if (!inicio)
            recuperarActividad();
        else
            iniciarActividad();
    }

}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putInt("llamadas", this.llamadas);
    outState.putStringArray("itemsProvincias", this.itemsProvincias);
    outState.putStringArray("itemsProvisionales", this.itemsProvisionales);
    outState.putStringArray("itemsEspecialidades", this.itemsEspecialidades);
    outState.putParcelableArray("cambiador", this.cambiador);

    outState.putBoolean("inicio", this.inicio);
}

public void iniciarActividad() {
    llCargado = (LinearLayout) findViewById(R.id.cargado);
    llCancelado = (LinearLayout) findViewById(R.id.cancelado);

    new ObtenerProvincias()
            .execute("https://****************/obtener_provincias.php");
     //this php service returns spanish regions array.

    pdia = new ProgressDialog(this);
    pdia.setMessage("Cargando datos...");
    pdia.setCancelable(false);
    pdia.show();
    bloquear();

    Spinner spLocalidades = (Spinner) findViewById(R.id.spLocalidadesCen);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.layout_spinner_item, new String[] { "Cualquiera" });

    spLocalidades.setAdapter(adapter);
}

public void recuperarActividad() {

    /** Vuelvo a crear los spinners **/

    ArrayAdapter<String> adapter;

    Spinner spProvincias = (Spinner) findViewById(R.id.spProvinciasCen);
    adapter = new ArrayAdapter<String>(this, R.layout.layout_spinner_item,
            itemsProvincias);

    spProvincias.setAdapter(adapter);

    /*
     * Pongo el listener al spinner de provincias para que cambie el de las
     * localidades.
     */

    spProvincias.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                                   int position, long id) {

            if (negarSp) {
                negarSp = false;
            } else {
                cambiarProvincias();
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }
    });

    Spinner spLocalidades = (Spinner) findViewById(R.id.spLocalidadesCen);
    adapter = new ArrayAdapter<String>(this, R.layout.layout_spinner_item,
            new String[] { "Cualquiera" });

    spLocalidades.setAdapter(adapter);

    Spinner spEspecialidades = (Spinner) findViewById(R.id.spEspecialidadesCen);
    adapter = new ArrayAdapter<String>(this, R.layout.layout_spinner_item,
            itemsEspecialidades);

    spEspecialidades.setAdapter(adapter);

    // Finalmente hago la interfaz visible.
    llCargado = (LinearLayout) findViewById(R.id.cargado);

    llCargado.setVisibility(View.VISIBLE);
}

public void cambiarProvincias() {

    /*
     * Lectura de provincias y localidades en el array de modelos for (int i
     * = 1; i < cambiador.length; i++) {
     *
     * Log.d("PROV", cambiador[i].getProvincia());
     *
     * for (int j = 0; j < cambiador[i].getLocalidades().length; j++) {
     * Log.d("Vector", cambiador[i].getLocalidades()[j]); } }
     */

    Spinner spProvincias = (Spinner) findViewById(R.id.spProvinciasCen);
    Spinner spLocalidades = (Spinner) findViewById(R.id.spLocalidadesCen);

    ArrayAdapter<String> adapter = null;

    for (int i = 1; i < cambiador.length; i++) {

        if (cambiador[i].getProvincia().equalsIgnoreCase(
                spProvincias.getSelectedItem().toString())) {

            adapter = new ArrayAdapter<String>(this,
                    R.layout.layout_spinner_item,
                    cambiador[i].getLocalidades());
        }

    }

    if (spProvincias.getSelectedItem().toString()
            .equalsIgnoreCase("Seleccione una provincia")) {
        adapter = new ArrayAdapter<String>(this,
                R.layout.layout_spinner_item, new String[] { "Cualquiera" });
    }
    spLocalidades.setAdapter(adapter);
}

    /*** Tarea as´┐Żncrona que obtiene los datos de los desplegables - Primeros *****/
    private class ObtenerProvincias extends AsyncTask<String, Void, JSONArray> {

    public boolean conexion = true;
    public JSONArray jArray = null;

    @Override
    protected JSONArray doInBackground(String... urls) {

        String resultado = "";
        InputStream is = null;
        // Bloque de petici´┐Żn http.
        try {

            // Par´┐Żmetros para tiempo m´┐Żximo de conexi´┐Żn antes de abortar.
            HttpParams httpParams = new BasicHttpParams();
            int timeoutConexion = 5000;
            HttpConnectionParams.setConnectionTimeout(httpParams,timeoutConexion);
            Log.i("CONECTANDO [A]", "Intentando conectar...");
            HttpClient clienteHttp = new DefaultHttpClient(httpParams);
            HttpPost httppost = new HttpPost(urls[0]);
            httppost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE,false);







           //this line crash

            //Falla aqui!!!!!!!!!
            HttpResponse respuesta = clienteHttp.execute(httppost);
            Log.w("Response ","Status line : "+ respuesta.getStatusLine().toString());









            HttpEntity entidad = respuesta.getEntity();
            is = entidad.getContent();
        } catch (org.apache.http.conn.ConnectTimeoutException cte) {
            Log.e("_-:ERROR:-_",
                    "¡ERROR EN LA CONEXIÓN AL SERVIDOR desde A! "
                            + cte.toString());
            conexion = false;
            cancel(true);

        } catch (ClientProtocolException e) {
            cancel(true);
        } catch (IOException e) {
            cancel(true);
        }
        // Bloque de conversi´┐Żn de respuesta.
        if (conexion) {
            // Convierte la respuesta a un String.
            try {
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(is, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();
                String linea = null;
                while ((linea = reader.readLine()) != null) {
                    sb.append(linea + "n");
                }
                is.close();

                resultado = sb.toString();
                Log.i("Lectura de Pag.->", "[" + resultado + "]");
            } catch (Exception e) {
                Log.e("_-:ERROR:-_", "!ERROR AL CONVERTIR EL resultado A! "
                        + e.toString());
                cancel(true);
            }

            // Parsear los datos en JSON.
            try {
                jArray = new JSONArray(resultado);
                for (int i = 0; i < jArray.length(); i++) {
                    jArray.getJSONObject(i);
                }

            } catch (JSONException e) {
                Log.e("_-:ERROR:-_", "¡ERROR DE PARSING EN LOS DATOS A!. "
                        + e.toString());
                cancel(true);
            }
        }

        return jArray;
    }

    // El siguiente metodo se ejecuta en el UI thread cuando la asyntask
    // termina.
    @Override
    protected void onPostExecute(JSONArray jArray) {
        super.onPostExecute(jArray);

        ArrayAdapter<String> adapter;

        /*
         * Cojo las provincias que he sacado del servidor y las coloco en un
         * array de Strings.
         */

        itemsProvincias = new String[jArray.length() + 1];
        itemsProvincias[0] = "Seleccione una provincia";
        for (int i = 1; i < itemsProvincias.length; i++) {
            try {
                itemsProvincias[i] = jArray.getJSONObject(i - 1).getString(
                        "provincia");
                Log.i("ITEMS_PROVINCIAS", itemsProvincias[i]);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            // Creo el spinner de las provincias.
            adapter = new ArrayAdapter<String>(FiltroCentros.this,
                    R.layout.layout_spinner_item, itemsProvincias);

            Spinner spProvincias = (Spinner) findViewById(R.id.spProvinciasCen);
            spProvincias.setAdapter(adapter);

            /*
             * Creo un contenedor para las localidades basandome en la
             * cantidad de provincias, para poder cambiar las localidades en
             * funci´┐Żn de estas.
             */
            cambiador = new ModeloProvincias[itemsProvincias.length];

            spProvincias
                    .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                        @Override
                        public void onItemSelected(AdapterView<?> parent,
                                                   View view, int position, long id) {

                            if (negarSp) {
                                negarSp = false;
                            } else {
                                cambiarProvincias();
                            }

                        }

                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {
                            // TODO Auto-generated method stub

                        }
                    });
        }

        /*
         * Realizo la primera nueva asynctask que ir´┐Ż creando otras hasta
         * completar las localidades de todas las provincias.
         */

        llamadas++;// La variable llamadas lleva un control sobre cuantas
        // deben hacerse.
        new ObtenerLocalidades()
                .execute("https://ofersalud.es/appandroid/filtro_spinner.php?cambio="
                        + itemsProvincias[llamadas]);
    }

    @Override
    protected void onCancelled() {

        llamadas = 0;
        if (pdia.isShowing()) {
            pdia.dismiss();
            liberar();
        }

        llCargado.setVisibility(View.GONE);
        llCancelado.setVisibility(View.VISIBLE);

    }

}

/*** Tarea as´┐Żncrona que obtiene los datos de los desplegables - Segundos *****/
private class ObtenerLocalidades extends AsyncTask<String, Void, JSONArray> {

    public boolean conexion = true;
    public JSONArray jArray = null;

    @Override
    protected JSONArray doInBackground(String... urls) {

        String resultado = "";
        InputStream is = null;

        // Bloque de petici´┐Żn http.
        try {
            // Par´┐Żmetros para tiempo m´┐Żximo de conexi´┐Żn antes de abortar.
            HttpParams httpParams = new BasicHttpParams();
            int timeoutConexion = 5000;
            HttpConnectionParams.setConnectionTimeout(httpParams,
                    timeoutConexion);
            Log.i("CONECTANDO [B]", "Intentando conectar...");
            HttpClient clienteHttp = new DefaultHttpClient(httpParams);
            HttpPost httppost = new HttpPost(urls[0]);
            httppost.getParams().setBooleanParameter(
                    CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
            HttpResponse respuesta = clienteHttp.execute(httppost);
            HttpEntity entidad = respuesta.getEntity();
            is = entidad.getContent();
        } catch (org.apache.http.conn.ConnectTimeoutException cte) {
            Log.e("_-:ERROR:-_",
                    "´┐ŻERROR EN LA CONEXI´┐ŻN AL SERVIDOR desde A! "
                            + cte.toString());
            conexion = false;
            cancel(true);

        } catch (ClientProtocolException e) {
            cancel(true);
        } catch (IOException e) {
            cancel(true);
        }
        // Bloque de conversi´┐Żn de respuesta.
        if (conexion) {
            // Convierte la respuesta a un String.
            try {
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(is, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();
                String linea = null;
                while ((linea = reader.readLine()) != null) {
                    sb.append(linea + "n");
                }
                is.close();

                resultado = sb.toString();
                Log.i("Lectura de Pag.->", "[" + resultado + "]");
            } catch (Exception e) {
                Log.e("_-:ERROR:-_", "´┐ŻERROR AL CONVERTIR EL resultado A! "
                        + e.toString());
                cancel(true);
            }

            // Parsear los datos en JSON.
            try {
                jArray = new JSONArray(resultado);
                for (int i = 0; i < jArray.length(); i++) {
                    jArray.getJSONObject(i);

                }

            } catch (JSONException e) {
                Log.e("_-:ERROR:-_", "´┐ŻERROR DE PARSING EN LOS DATOS A!. "
                        + e.toString());
                cancel(true);
            }
        }

        return jArray;
    }

    // El siguiente m´┐Żtodo se ejecuta en el UI thread cuando la asynctask
    // termina.
    @Override
    protected void onPostExecute(JSONArray jArray) {
        super.onPostExecute(jArray);

        itemsProvisionales = new String[jArray.length() + 1];
        itemsProvisionales[0] = "Cualquiera";
        for (int i = 1; i < itemsProvisionales.length; i++) {

            try {
                itemsProvisionales[i] = jArray.getJSONObject(i - 1)
                        .getString("localidad");
                Log.e("ITEMS_PROVISIONALES: ", itemsProvisionales[i]);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        /* LLeno el contenedor de localidades */
        cambiador[llamadas] = new ModeloProvincias(
                itemsProvincias[llamadas], itemsProvisionales);

        llamadas++;

        /*
         * Si no es la ´┐Żltima asynctask creo una nueva pasandole al filtro
         * del spinner la posici´┐Żn de la siguiente provincia controlada por
         * la variable (llamadas).
         */
        if (llamadas < itemsProvincias.length) {
            new ObtenerLocalidades()
                    .execute("https://ofersalud.es/appandroid/filtro_spinner.php?cambio="
                            + itemsProvincias[llamadas]);
        } else {/*
                 * Si no, cargo el ´┐Żltimo spinner creando la asyntask que
                 * obtiene sus datos.
                 */
            new ObtenerEspecialidades()
                    .execute("https://ofersalud.es/appandroid/obtener_especialidades.php");
        }

    }

    @Override
    protected void onCancelled() {

        llamadas = 0;
        if (pdia.isShowing()) {
            pdia.dismiss();
            liberar();
        }

        llCargado.setVisibility(View.GONE);
        llCancelado.setVisibility(View.VISIBLE);

    }

}

/*** Tarea as´┐Żncrona que obtiene los datos de los desplegables - Terceros *****/
private class ObtenerEspecialidades extends
        AsyncTask<String, Void, JSONArray> {

    public boolean conexion = true;
    public JSONArray jArray = null;

    @Override
    protected JSONArray doInBackground(String... urls) {

        String resultado = "";
        InputStream is = null;

        // Bloque de petici´┐Żn http.
        try {
            // Par´┐Żmetros para tiempo m´┐Żximo de conexi´┐Żn antes de abortar.
            HttpParams httpParams = new BasicHttpParams();
            int timeoutConexion = 5000;
            HttpConnectionParams.setConnectionTimeout(httpParams,
                    timeoutConexion);
            Log.i("CONECTANDO [C]", "Intentando conectar...");
            HttpClient clienteHttp = new DefaultHttpClient(httpParams);
            HttpPost httppost = new HttpPost(urls[0]);
            httppost.getParams().setBooleanParameter(
                    CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
            HttpResponse respuesta = clienteHttp.execute(httppost);
            HttpEntity entidad = respuesta.getEntity();
            is = entidad.getContent();
        } catch (org.apache.http.conn.ConnectTimeoutException cte) {
            Log.e("_-:ERROR:-_",
                    "´┐ŻERROR EN LA CONEXI´┐ŻN AL SERVIDOR desde A! "
                            + cte.toString());
            conexion = false;
            cancel(true);

        } catch (ClientProtocolException e) {
            cancel(true);
        } catch (IOException e) {
            cancel(true);
        }
        // Bloque de conversi´┐Żn de respuesta.
        if (conexion) {
            // Convierte la respuesta a un String.
            try {
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(is, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();
                String linea = null;
                while ((linea = reader.readLine()) != null) {
                    sb.append(linea + "n");
                }
                is.close();

                resultado = sb.toString();
                // Log.i("Lectura de Pag.->", "[" + resultado + "]");
            } catch (Exception e) {
                Log.e("_-:ERROR:-_", "´┐ŻERROR AL CONVERTIR EL resultado A! "
                        + e.toString());
                cancel(true);
            }

            // Parsear los datos en JSON.
            try {
                jArray = new JSONArray(resultado);
                for (int i = 0; i < jArray.length(); i++) {
                    jArray.getJSONObject(i);
                }

            } catch (JSONException e) {
                Log.e("_-:ERROR:-_", "´┐ŻERROR DE PARSING EN LOS DATOS A!. "
                        + e.toString());
                cancel(true);
            }
        }

        return jArray;
    }

    // El siguiente m´┐Żtodo se ejecuta en el UI thread cuando la asynctask
    // termina.
    @Override
    protected void onPostExecute(JSONArray jArray) {
        super.onPostExecute(jArray);

        ArrayAdapter<String> adapter;

        itemsEspecialidades = new String[jArray.length() + 1];
        itemsEspecialidades[0] = "Cualquiera";
        for (int i = 1; i < itemsEspecialidades.length; i++) {
            try {
                itemsEspecialidades[i] = jArray.getJSONObject(i - 1)
                        .getString("nombre");
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        adapter = new ArrayAdapter<String>(FiltroCentros.this,
                R.layout.layout_spinner_item, itemsEspecialidades);
        Spinner spEspecialidades = (Spinner) findViewById(R.id.spEspecialidadesCen);

        spEspecialidades.setAdapter(adapter);

        llCargado.setVisibility(View.VISIBLE);

        if (pdia.isShowing()) {
            pdia.dismiss();
            liberar();
        }

        inicio = false;

    }

    @Override
    protected void onCancelled() {

        llamadas = 0;
        if (pdia.isShowing()) {
            pdia.dismiss();
            liberar();
        }

        llCargado.setVisibility(View.GONE);
        llCancelado.setVisibility(View.VISIBLE);

    }

}

public void abrirLista(View v) {

    Spinner spProvincias = (Spinner) findViewById(R.id.spProvinciasCen);
    Spinner spLocalidades = (Spinner) findViewById(R.id.spLocalidadesCen);
    Spinner spEspecialidades = (Spinner) findViewById(R.id.spEspecialidadesCen);

    Intent i = new Intent(getApplicationContext(), ListaCentros.class);
    i.putExtra("provincia", spProvincias.getSelectedItem().toString());
    i.putExtra("localidad", spLocalidades.getSelectedItem().toString());
    i.putExtra("especialidad", spEspecialidades.getSelectedItem()
            .toString());

    // Identificador de modo.
    i.putExtra("todos", false);
    i.putExtra("origen", "");

    if (!spProvincias.getSelectedItem().toString()
            .equalsIgnoreCase("Seleccione una provincia")) {
        startActivity(i);
    } else {
        mostrarDialogo();
    }
}

public void abrirMapa(View v) {
    Spinner spProvincias = (Spinner) findViewById(R.id.spProvinciasCen);
    Intent i = new Intent(getApplicationContext(), MapaOfs.class);
    i.putExtra("provincia", spProvincias.getSelectedItem().toString());
    // Identificador de modo.
    i.putExtra("todos", true);
    i.putExtra("origen", "");

    if (!spProvincias.getSelectedItem().toString()
            .equalsIgnoreCase("Seleccione una provincia")) {
        startActivity(i);
    } else {
        mostrarDialogo();
    }
}

public void mostrarDialogo() {
    // Bloque la rotaci´┐Żn del dispositivo.
    bloquear();
    // Creo mi di´┐Żlogo personalizado.
    final Dialog alert = new Dialog(FiltroCentros.this, R.style.DialogTheme);
    alert.setOnDismissListener(new DialogInterface.OnDismissListener() {

        @Override
        public void onDismiss(DialogInterface dialog) {
            // Al desaparecer el di´┐Żlogo...
            liberar();

        }
    });
    alert.requestWindowFeature(Window.FEATURE_NO_TITLE);// Sin t´┐Żtulo.
    alert.setContentView(R.layout.layout_dialogo_custom);
    // Le doy el texto deseado.
    TextView msg = (TextView) alert.findViewById(R.id.twMensaje);
    msg.setText("Seleccione una provincia para continuar, por favor.");

    LinearLayout btn = (LinearLayout) alert.findViewById(R.id.llBtn);

    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            alert.dismiss();
            liberar();

        }
    });

    alert.show();
}

public void reiniciarActividad(View v) {

    this.recreate();
}

public void bloquear() {
    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    else
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

public void liberar() {
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

}


Source: mysql

Leave a Reply