Base de datos remota

JSON que se extrae
http://basededatosremotas.meximas.com/ramiroconnect/get_all_empresas.php

Puede acceder desde acá a HOSTINGER
Hosting


Base de datos remotas parte1

Base de datos parte2

MyActivity.java
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


public class MyActivity extends ActionBarActivity {

    // Progress Dialog
    private ProgressDialog pDialog;

    // Creating JSON Parser object
    JSONParser jParser = new JSONParser();

    ArrayList<HashMap<String, String>> empresaList;


    // url to get all products list
    private static String url_all_empresas = "http://basededatosremotas.meximas.com/ramiroconnect/get_all_empresas.php";

    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCTS = "empresas";
    private static final String TAG_ID = "id";
    private static final String TAG_NOMBRE = "nombre";

    // products JSONArray
    JSONArray products = null;

    ListView lista;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        // Hashmap para el ListView
         empresaList = new ArrayList<HashMap<String, String>>();

        // Cargar los productos en el Background Thread
        new LoadAllProducts().execute();
        lista = (ListView) findViewById(R.id.listAllProducts);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);

    }//fin onCreate


     class LoadAllProducts extends AsyncTask<String, String, String> {

        /**
         * Antes de empezar el background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MyActivity.this);
            pDialog.setMessage("Cargando comercios. Por favor espere...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        /**
         * obteniendo todos los productos
         * */
        protected String doInBackground(String... args) {
            // Building Parameters
            List params = new ArrayList();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url_all_empresas, "GET", params);

            // Check your log cat for JSON reponse
            Log.d("All Products: ", json.toString());

            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // products found
                    // Getting Array of Products
                    products = json.getJSONArray(TAG_PRODUCTS);

                    // looping through All Products
                    //Log.i("ramiro", "produtos.length" + products.length());
                    for (int i = 0; i < products.length(); i++) {
                        JSONObject c = products.getJSONObject(i);

                        // Storing each json item in variable
                        String id = c.getString(TAG_ID);
                        String name = c.getString(TAG_NOMBRE);

                        // creating new HashMap
                        HashMap map = new HashMap();

                        // adding each child node to HashMap key => value
                        map.put(TAG_ID, id);
                        map.put(TAG_NOMBRE, name);

                        empresaList.add(map);
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String file_url) {
            // dismiss the dialog after getting all products
            pDialog.dismiss();
            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
                    /**
                     * Updating parsed JSON data into ListView
                     * */
                    ListAdapter adapter = new SimpleAdapter(
                            MyActivity.this,
                            empresaList,
                            R.layout.single_post,
                            new String[] {
                                    TAG_ID,
                                    TAG_NOMBRE,
                            },
                            new int[] {
                                    R.id.single_post_tv_id,
                                    R.id.single_post_tv_nombre,
                            });
                    // updating listview
                    //setListAdapter(adapter);
                    lista.setAdapter(adapter);
                }
            });
        }
    }
}

JSONParser.java
import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
                                      List params) {

        // Making HTTP request
        try {

            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }


        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

activity_my.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    
    <ListView
        android:id="@+id/listAllProducts"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="3dp"
        android:background="#fff"/>

</LinearLayout>

single_post.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:background="#f0f0f0"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/single_post_tv_nombre"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:paddingBottom="2dip"
        android:padding="10dp"
        android:textColor="#333"
        android:textSize="12dp"
        android:textStyle="bold"
        android:text="nombre" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="id"
        android:id="@+id/single_post_tv_id"
        android:visibility="gone" />


</LinearLayout>

db_connect.php
<?php

/**
 * A class file to connect to database
 */
class DB_CONNECT {

    // constructor
    function __construct() {
        // connecting to database
        $this->connect();
    }

    // destructor
    function __destruct() {
        // closing db connection
        $this->close();
    }

    /**
     * Function to connect with database
     */
    function connect() {
        // import database connection variables
        require_once __DIR__ . '/db_config.php';

        // Connecting to mysql database
        $con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());

        // Selecing database
        $db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());

        // returing connection cursor
        return $con;
    }

    /**
     * Function to close db connection
     */
    function close() {
        // closing db connection
        mysql_close();
    }

}

?>

get_all_empresas.php
<?php
 
/*
 * Following code will list all the products
 */
 
// array for JSON response
$response = array();
 
// include db connect class
require_once __DIR__ . '/db_connect.php';

 
// connecting to db
$db = new DB_CONNECT();
 
// get all products from products table
$result = mysql_query("SELECT *FROM empresa") or die(mysql_error());
 
// check for empty result
if (mysql_num_rows($result) > 0) {
    // looping through all results
    // products node
    $response["empresas"] = array();
 
    while ($row = mysql_fetch_array($result)) {
        // temp user array
        $product = array();
        $product["id"] = $row["id"];
        $product["nombre"] = $row["nombre"];
        // push single product into final response array
        array_push($response["empresas"], $product);
    }
    // success
    $response["success"] = 1;
 
    // echoing JSON response
    echo json_encode($response);
} else {
    // no products found
    $response["success"] = 0;
    $response["message"] = "No products found";
 
    // echo no users JSON
    echo json_encode($response);
}
?>

db_config.php
<?php
define('DB_USER', "u000000_nombre"); // db user
define('DB_PASSWORD', "soylacontraseña"); // db password (mention your db password here)
define('DB_DATABASE', "u00000_bdnombre"); // database name
define('DB_SERVER', "localhost"); // db server
?>

AndroidManifest.xml AGREGAR Internet connection

  <uses-permission android:name="android.permission.INTERNET" />

Queda de la siguiente manera
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.elpoeta.leercomentariosbdremota" >

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MyActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


252 comentarios:

  1. Estupendo tutorial y muy detallado!
    Muchas gracias por tu aporte!

    Un giro de tuerca más:
    Cómo sería si se quisiera tener un poco más de seguridad y pasar como parámetros el usuario y password de la base de datos cuando se fuera a conectar?
    Es que veo poco seguro poner los datos de acceso en db_config.php, al que se puede acceder.

    Muchas gracias de antemano

    ResponderEliminar
    Respuestas
    1. en realidad vos podes trabajar como quieras, el tema es después es acordarse en donde esta cada cosa, si lo segmentas en más pedasos entonces tenes que hacer más llamadas.
      Yo te recomiendo que lo hagas así, porque no se puede ver, es bastante seguro. Cuando lo ejecutas desde la web, el navegador interpreta lo que dice y muestra si hay un echo..
      A lo sumo te podrías recomendar que le cambias por otro nombre, como connect31231321.php o algo raro, pero al final cabo el único que va a poder verlo sos vos

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  2. Saludos muy buenos tutoriales una consulta aver si me pueden ayudar como se realizaría si quisiera sincronizar datos que tengo en mi db sqlite local con una mysql en un servidor o sea que me permita guardar datos en la db local en caso de no tener internet y cuando tuviera internet que me permita insertar los datos a mysql por medio de un botón muchas gracias y felices fiestas ..

    ResponderEliminar
    Respuestas
    1. estoy armando el tuto de google maps, después me pongo con eso

      Eliminar
    2. Ramiro, no se si ya lo tendrás acabado, pero no lo veo por ningún sitio, seguro que es estupendo. Gracias

      Eliminar
  3. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  4. Hola Ramiro, excelentes videos he!.
    una consulta con respecto a base de datos externas, como puedo hacer para conectarme a una base de datos PostgreSQL alojado en un servidor, mas o menos tengo entendido que hay que descargar el conector del PostgresSQL y luego agregarlo a las librerías del Android studio, pero como hago ese procedimiento y como seria el código de la conexión, favor me podrías orientar, Gracias.

    Saludos de Perú

    ResponderEliminar
    Respuestas
    1. Solo he trabajado con mysql, ahora que estoy mirando windows phone tal ves te pueda dar una respuesta.

      Eliminar
    2. Para utilizar PostgreSQL tan solo tienes que utilizar el conector de base de datos adecuado, en tu caso pg_connect en el fichero db_connect.php.
      Aquí tienes documentación: http://php.net/manual/en/function.pg-connect.php
      Sustituye los parámetros y las llamadas mysql_error por las correspondientes del conector de Postgre.
      Saludos.

      Eliminar
  5. hola Ramiro me podrias ayudar tengo un problema, al momento de visualizar los datos me aparece como NULL
    "id":null
    "nombre":null
    de antemano muchas gracias

    ResponderEliminar
    Respuestas
    1. no me ha pasado eso, pero revisa el tuto, debe ser algo pequeño que esta esta faltando

      Eliminar
    2. Comprueva las mayusculas y minusculas en los nombres de los campos

      Eliminar
    3. Hola, los registros que tratas de recuperar poseen tildes o contienen palabras con la letra "ñ"?
      Si es así, puede que te retorne null.
      Lo que tienes que hacer es primero que nada que tus tablas estén con cotejamiento "utf8_spanish_ci", luego añade la siguiente línea
      mysql_query("SET NAMES 'utf8'");
      añadela debajo de "$db = new DB_CONNECT();" de tu archivo php.
      saludos.

      Eliminar
  6. Hola Ramiro son geniales tua explicaciones tanto que me diste ganas de volver a darme una oportunidad con android studio. Mi consulta es la siguiente:
    Probe el tuto y me anduvo perfecto pero me interesa poder recuperar imagenes para cargar en el listview.
    Una vez entes de fruatrarme trate de guardar las imagenes en un campo de la tabla en formato base64 pero no pude lograr hacer la conversión en la apk. Ahora nuevamente busque sobre el tema y lei que ea mejor guardar las imagenes en el servidor y en la base solo guardar la direccion o nombre de la misma. Este metodo seria mas optimizado para gran cantidad de imágenes. La consulta seria que opinion tenes al respecto, que sistema me recomiendas y si podrias hacer un tuto al respecto.
    Muchas gracias por compartir y ppr tu tiempo!!!

    ResponderEliminar
  7. Hola, Ramiro desde Venezuela te escribo por que estoy desarrollando una aplicación multinivel y tengo listar a los miembros, ya e construido las consultas y e probado las URL y perfecto de echo personalize un layout para los Items del ListView el problema esta cuando lanzo la aplicacion me muestra este error W/EGL_emulation﹕ eglSurfaceAttrib not implemented e buscado en internet sin exitos espero tu ayuda, utilizo Android Studio. Gracias.

    ResponderEliminar
    Respuestas
    1. Has declarado todo en el AndroidManifest.xml?

      Eliminar
    2. si todo esta configurado en el AndroidManifest.xml de echo antes de ejecutar esta consulta hay un activity deonde se logean y se conecta a la bd perfectamente lo que necesito es listar resultados pero no me funciona.

      Eliminar
  8. Hola Ramiro, disculppa que vuelvo a reiterar mi consulta, es que me di cuenta tarde que habia posteado como anonimo y al ver que no respondias crei que tal vez era ese el motivo.
    Asi que reitero mi consulta, ahora dando la cara... (o el nombre al menos):

    Son geniales tua explicaciones tanto que me diste ganas de volver a darme una oportunidad con android studio. Mi consultata es la siguiente:
    Probe el tuto y me anduvo perfecto pero me interesa poder recuperar imagenes para cargar en el listview.
    Una vez entes de fruatrarme trate de guardar las imagenes en un campo de la tabla en formato base64 pero no pude lograr hacer la conversión en la apk. Ahora nuevamente busque sobre el tema y lei que ea mejor guardar las imagenes en el servidor y en la base solo guardar la direccion o nombre de la misma. Este metodo seria mas optimizado para gran cantidad de imágenes. La consulta seria que opinion tenes al respecto, que sistema me recomiendas y si podrias hacer un tuto al respecto.
    Muchas gracias por compartir y ppr tu tiempo!!!

    Te cuento que logre cargar las imagenes en el listview, de tal modo que guarde en la base los nombres de la mismas, luego las subi a una carpeta en el servidor y despues las recupero con la direccion html. No se si es la mejor manera pero funciona.
    La cuestion ahora es que modifique el archivo php para hacer una consulta con un where. Asi que la direccion seria algo como: "http://hostiger/baseremota.com/consultawhere.php?nombre=jose".
    Lo raro es que en esplorador funciona, pero en la apk nop.
    Alguna idea de que pueda estar haciendo mal!!!???
    Tengo habilitado los permisos de internet en el manifiest.

    Muchas gracias!!! Saludos... Cristian.

    ResponderEliminar
    Respuestas
    1. Hola, yo nuevamente... bueno prestando un poco de atencion al codigo cai que en la llamada al constructor de la clase JSONParser hay un parametro que es juatamente una array, que se supone agregarian a ese array y listo... ahora... y como???
      Yo hice algo como esto:

      params.add("nombre=emp1");

      pero no funciono, de hecho me cuelga la aplicacion.
      Alguna sugrerencia???

      Eliminar
    2. Bueno como bien cabeza dura y ansioso que soy despues de buscar y buscar di con la respuesta. La dejo para quien la nesecite:

      List params = new ArrayList();
      params.add(new BasicNameValuePair("nombre","emp1"));

      Asi se agregan los parametros a la lista para que los tome correctamente.

      Aclaro, para los apurados y con poca paciencia para leer como yo, que para que esto funcione aparte de agregar los parametros hay que modificar el archivo php que puso ramiro, para que acepte y entienda que hacer los parametros.
      Pongo un resumen de mi archivo php modificado:

      //$donde = emp1; variable declarada

      //asi captura el parametro en la url
      $donde= $_GET["nombre"];

      $result = mysql_query("SELECT * FROM empresas WHERE nombre = '$donde' ") or die(mysql_error());

      y la url (link) seria asi:
      http://basededatosremota.com/carpeta/get_all_empresas.php?nombre=emp1

      Si copian esa direccion (obviamente cambiando los datos por los correspondientes a su hosting), deberia de darle como resultado algo como esto.

      {"empresas":[{"id":"1","nombre":"emp1"},{"id":"5","nombre":"emp1"},{"id":"6","nombre":"emp1"}],"success":1}

      (yo agregue mas campos con el nombre emp1 para que me salgan mas).

      Despues lo prueban en la apk modificando lo que les comente al principio.

      Creo que eso es todo cualquier cosa golpean que me doy una vuelta...

      Sin mas que decir y agradeserte RAMIRO por la ayuda que me has brindado con este tutorial y reconoser que de no ser por eso aun seguieria dando vueltas.

      Saludos y gracias nuevamente.... Cristian.

      Eliminar
    3. Hola, me podras apoyar mostrando el codigo de como lograste pasar las imagenes al list view ya que estoy desarrollando un proyecto final escolar y he intentado pasar las imagenes y no lo he logrado, me indica cierre inesperado de la aplicación o solo me muestra el texto pero no la imagen.
      Agradeceré infinitamente tu apoyo amigo, gracias...

      Eliminar
    4. Buenas tyto me sumo a lo que armaste ... estoy en la misma que vos se me esta complicando mucho cargar las imagenes en el linstView .. me podrias pasar tu codigo para chusmearlo .... muchas Gracias .. Saludos .. te dejo mi mail . carlosay_20@live.com.ar

      Eliminar
    5. Hola que tal?
      Lograron ponerle imagenes al ListView? Saludoss

      Eliminar
  9. Buenas ramiro, tengo un problema con la app que estoy creando(de futbol). Tengo un NavDrawer con un apartado llamado clasificacion el cual me dirige al activity que contiene los datos de la base de datos. El problema es que al abrirlo pueden suceder 2 cosas: La primera es que tenga conexion a internet y me salgan los datos correctamente o la segunda, que no tenga internet y automaticamente se me sale de la app y lo que quiero es que salga el ultimo registro descargado

    Por ejemplo: Listview con datos:("Equipo", "puntos", "partidos ganados", "partidos perdidos" etc...)


    Al entrar con internet: se actualiza y me salen los datos actualizados (Equipo1 12 puntos 4 ganados 0 perdidos)

    Al entrar sin internet: quiero que me salga la ultima actualizacion que se haya hecho (Equipo 1 9 puntos 3 ganados 0 perdidos)

    ResponderEliminar
    Respuestas
    1. Por un lado tendrias que guardar los datos de la ultima conexion en el telefono.
      Hay verias formas, con sqlite o SharePrefences (dependiendo de que tantos datos quieras guardar). Aca Ramiro tiene tutos tanto de sqlite como de SharePrefences.
      Una vez que tengas guardados los registros en el celu, lo que podes hacer es que al abrir la aplicacion lo primero que haga sea consultar si tenes conexion, y dependiendo la respeusta bajas de la base de dato o cargas lo que tengas guardado en local.

      Saludos... Cristian.

      Eliminar
    2. Muchas gracias Cristian un saludo crack :)

      Eliminar
  10. Me esta saliendo el siguiente error

    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u382926248/public_html/conecta/db_connect.php on line 28


    parece que tienes un scrip php nuevo. podias compartir?

    ResponderEliminar
    Respuestas
    1. Hola gente, aqui les dejo un link q encontre donde hay una info muy completa sobre base de datos y donde podran ver la sintaxis para conectarse mediante mysqli ademas de ejemplos para trabajar con bd. Espero les sirva, suerteeeeee.
      http://www.hostinger.es/forum/scripts-y-fragmentos-de-codigo/551-tut-como-usar-mysql-en-php.html

      Eliminar
  11. Hola Ramiro, al querer conectarme a mi tambien me sale el error: "Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO..."

    Podrías cambiar el codigo de conexion mysql a mysqli ?
    Un millon de Gracias. Son muy buenos tus tutoriales.

    ResponderEliminar
    Respuestas
    1. Coloca para una @ antes omite esas notificaciones eso no es error así es que mysql esta obsoleto @mysql_connect():

      Eliminar
    2. Coloca para una @ antes omite esas notificaciones eso no es error así es que mysql esta obsoleto @mysql_connect():

      Eliminar
    3. Gracias douglas

      Eliminar
  12. Que tal Ramiro ese mismo error:
    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO...
    lo tengo desde hace un tiempo, parece q no hace mucho decidieron cambiar de mysql a mysqli porque yo tengo una conexion desde agosto del año pasado y aun hoy me sigue funcionando. Es decir q aquel q crea hoy una conexion basada en mysql le sale este error.
    Por favor cuando tengas tiempo puedes cambiar el codigo de conexion. Gracias

    ResponderEliminar
  13. Buenas tardes, muy bueno el tuto, me pasa lo mismo que a los compañeros anteriores, he investigado y hay una cosa nueva, el msqli, hay que tocar parte de los codigos que tienes.

    De todos modos mi pregunta es como poder en vez de ejecutar desde el MainActivity ejecutarlo desde NavDrawer, es decir, tengo un menú, y desde hay entro en un layout donde quiero mostrar mi BBDD, el tema es que no me muestra nada, podías poner un ejemplo.

    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. En el caso del MainActivity
      usas la clase java que tienes designada para el menú en mi caso la tengo como (SlideActivity)
      y ahi agregas lo muestra Ramiro en el tuto clases que faltan
      y depencencias en el Build.gradle(module:app)...

      Eliminar
  14. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  15. Rafel C.F26 de febrero de 2015, 8:43
    Vereis, todo correcto, pero al cambiar la url y poner

    private static String url_jugadores = "http://cadetes.esy.es/conexion/jugadores.php";

    pues no se que campos debo cambiar en el MainActivity.java, supongo que se controla todo desde ahi.

    Me podeis ayudar?

    Gracias

    ResponderEliminar
  16. Hola, alguien ha podido resolver lo de la conexion?

    Saludos!

    ResponderEliminar
    Respuestas
    1. Si daniel, a la primera, lo que no consigo es que me lea los datos, http://cadetes.esy.es/conexion/jugadores.php

      Eliminar
  17. Podriais decir como pulsando se abre un activiy? E visto tu tuto pero es un listview simple y no se al ser SQL

    ResponderEliminar
  18. Hola necesito enviar una imagen ademas del texto que se encuentre igualmente guardada en mi base de datos y que se muestre en el listview me podrias ayudar.

    Gracias...

    ResponderEliminar
  19. Hola Ramiro.. gracias por tus tutoriales.. logre realizar el de logging y me funciono perfecto! gracias por eso.. sin embargo cuando intento realizar este tutorial no lo logro mostrar nada en el listview.. no me da error pero no me aparece ninguna informacion, si corro el php en la web si me aparece lo que quiero pero en el app no... espero me puedas ayudar..

    ResponderEliminar
    Respuestas
    1. hola monica yo tengo el mismo problema lo pudiste solucionar ?

      Eliminar
  20. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  21. Gracias Ramiro desde España, lo hace muy sencillo y aunque me he pegado un poco con el tema del Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO... al final lo logré hacer funcionar, y para que este blog lo pueda utilizar aqui dejo el codigo de get_all_empresas.php, por cierto con este nuevo codigo no hace falta utilizar el db_connect.php.
    get_all_empresas.php :

    ResponderEliminar
  22. <?php
    $response = array();
    require_once __DIR__ . '/db_config.php';
    $conexion = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);
    $sql = " SELECT * FROM empresas";
    $result = mysqli_query($conexion, $sql);

    Sigue abajo :)

    ResponderEliminar
    Respuestas
    1. No se si el anterior comentario si fue publicado. Porfi López, muchas gracias por tu aporte, aunque me sale un error en la linea 7 (Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in/home/u857132115/public_html/dbnueva/
      get_all_empresas.php on line 7). Gracias y espero que me puedas ayudar!

      Eliminar
    2. Modifiqué esa linea por ( if (!$result || mysqli_num_rows($result) > 0) { ) según como lo solucionaron en otro foro (http://stackoverflow.com/questions/2546314/php-mysql-mysqli-num-rows-expects-parameter-1-to-be-mysqli-result-boolean) pero ya me sale otro error (Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /home/u857132115/public_html/dbnueva/get_all_empresas.php on line 10) y este si no se como solucionarlo. De antemano muchas gracias

      Eliminar
    3. Este comentario ha sido eliminado por el autor.

      Eliminar
    4. Este comentario ha sido eliminado por el autor.

      Eliminar
    5. Ok, ya logré solucionar el error por si a alguien le interesa.
      La linea 7 la reemplacé por if (!$result || mysqli_num_rows($result) > 0) {
      El otro error que tenia era que en la linea 5 ( $sql = " SELECT * FROM empresas"; ) mi tabla se llama "empresa", no "empresas", sin la "s". Es importante fijarse como llamaron su tabla y eso es todo. Espero que le sirva a alguien.
      ?php // hace falta <
      $response = array();
      require_once __DIR__ . '/db_config.php';
      $conexion = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);
      $sql = " SELECT * FROM empresa";
      $result = mysqli_query($conexion, $sql);
      if (!$result || mysqli_num_rows($result) > 0) {
      $response["empresas"] = array();

      if (!$result) { // Si no se conecta con la base de datos, muestra cual es el error
      printf("Error: %s\n", mysqli_error($conexion));
      exit();
      }

      while ($row = mysqli_fetch_array($result)) {
      ... Sigue el mismo código de Porfi López

      Eliminar
  23. Continua de arriba :)

    if (mysqli_num_rows($result) > 0) {
    $response["empresas"] = array();

    while ($row = mysqli_fetch_array($result)) {
    $product = array();
    $product["id"] = $row["id"];
    $product["nombre"] = $row["nombre"];
    array_push($response["empresas"], $product);
    }
    $response["success"] = 1;
    echo json_encode($response);
    } else {
    $response["success"] = 0;
    $response["message"] = "No products found";
    echo json_encode($response);
    }
    ?>

    ResponderEliminar
    Respuestas
    1. Tremendo aporte! Funciona perfectamente! Muchisimas gracias!

      Eliminar
    2. holadisculpeme prodian ayudar me marac un erro el codifo q sera
      Parse error : error de sintaxis, inesperado 'array_push' (T_STRING) en /home/u145566277/public_html/consul/get_all_alumno.php en la línea 23

      0) {
      $response["alumno"] = array();

      while ($row = mysqli_fetch_array($result)) {
      $product = array();
      $product["nombre"] = $row["nombre"];
      $product["apellido"] = $row["apellido"];
      $product["cel"] = $row["cel"];
      $product["correo"] = $row["correo"];
      $product["carrera"] = $row["carrera"];
      $product["matricula"] = $row["matricula"];
      $product["grado"] = $row["grado"];
      $product["grupo"] = $row["grupo"];
      $product["contraseña"] = $row["contraseña"]

      array_push($response["alumno"],$product);

      }
      $response["success"] = 1;
      echo json_encode($response);
      } else {
      $response["success"] = 0;
      $response["message"] = "No products found";
      echo json_encode($response);
      }
      ?>

      Eliminar
    3. ya encontre mi error gracias
      revise nuevamente los dos codigo y havia algo mal por cierto muy buenos estos tuto me ha ayudado mucho con la tesis

      Eliminar
    4. Porfi Lopez, me podrias ayuar. Al momento de ejecutar la app me aparece un mensaje que la app se detuvo. y nuca la abre. Si tu supieras que es o que tendria que hacer para arreglarlo te lo agradeceria!

      PD: tu codigo de php me sirvio mucho. Muchas Gracias

      Eliminar
    5. excelente me funciono con este ajuste ya que mysql arroja advertencias de que esta obsoleto. este ajuste de porfi lopez me ayudo a resolver el problema

      Eliminar
  24. Hola Ramiro de ante mano gracias por los tutoriales, estan muy buenos. Seguí todos los pasos y la api no levanta, me sale el error:
    error en doInBackground Caused by: java.lang.NullPointerException
    Me podrías ayudar con eso. Gracias y saludos desde Perú.

    ResponderEliminar
    Respuestas
    1. Hola Deivy, en el archivo JSONParser cambia method == "GET" y POST por method.equal("GET") y POST respectivamente.
      Espero que te sirva.
      Saludos

      Eliminar
    2. el error yo lo solucione corrigiendo el archivo php

      0) {
      $response["empresas"] = array();

      while ($row = mysqli_fetch_array($result)) {
      $product = array();
      $product["id"] = $row["id"];
      $product["nombre"] = $row["nombre"];
      array_push($response["empresas"], $product);
      }
      $response["success"] = 1;
      echo json_encode($response);
      } else {
      $response["success"] = 0;
      $response["message"] = "No products found";
      echo json_encode($response);
      }
      ?>

      Eliminar
  25. Hola Ramiro, muchas gracias por los turoriales. Al seguir tu ejemplo me daban los siguientes errores:

    E/Buffer Error﹕ Error converting result java.lang.NullPointerException
    E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of

    Tras un buen rato, "he averiguado" que mi error venía del fichero JSONParser, concrétamente en las comparaciones method == "GET" y method == "POST". La solución ha sido cambiar los "==" por method.equals("GET") y POST respectivamente.

    Muchas gracias y saludos desde España

    ResponderEliminar
  26. Ramiro primero agradecerte tanta ayuda con todos tus tutoriales, mi pregunta es, como haría para cargar los datos filtrados, o sea cargar únicamente un registro por ejemplo los del id 1, que me pida un text ingresar el id a cargar despues en el listview me muestre unicamente el ingresado. desde ya muchas gracias. un saludo

    ResponderEliminar
    Respuestas
    1. Para cargar o subir información debería ver este tutorial
      http://cursoandroidstudio.blogspot.com.ar/2015/01/base-de-datos-remotas-login.html
      Cuando hago REGISTER, en ese momento subo datos en la web.
      Si lo depuras y lo entendes bien, no vas a tener problemas

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
    3. Ramiro, tal ves no me hice entender, y discúlpame, lo que quiero es cargar en el listview únicamente un registro de los que tengo en la base de datos. Es decir donde yo ingrese el id de la fila no se se me ocurre en un edittext y me cargue solo esos datos de esa fila. Muchas gracias desde ya

      Eliminar
    4. No tengo un tuto así, pero te puedo dar una idea, con el tuto http://cursoandroidstudio.blogspot.com.ar/2015/01/base-de-datos-remotas-login.html cuando registras un usuario, pregunta si esta o no esta..
      Es lo primero que tendrías que hacer con el ID, ver si existe o no.
      En el caso que NO EXISTE, decis que no existe
      y cuando SI EXISTE, utilizas este tuto.

      Eliminar
    5. Ramiro muchasssssssss gracias por tu tiempo, voy a intentarlo y cualquier cosa lo comento. un saludo

      Eliminar
  27. Que tal, oye una pregunta habra otra forma de crear la conexion porque me marca como obsoletas las clases de apache

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Solucionado

      En el build.gradle en dependencias

      se le agregan las siguientes lineas

      compile"org.apache.httpcomponents:com.springsource.org.apache.httpcomponents.httpclient:4.2.1"
      compile 'org.apache.httpcomponents:httpclient:4.2.3'
      compile "com.google.android:support-v4:r6"


      Eliminar
  28. Buenas noches.

    Estoy algo novata en esto de las app, y he desarrollado una en Android Studio. Es algo asi como una base de datos con un buscador. Cuando consulto por ejemplo un codigo de la base de datos (ej. 9040), me tiene que dar lo que hay dentro de ese codigo, (ej. "Condimentos El Rey, x40 paquetes"). Hasta ahi todo bien. La situacion es que cuando salgo de la app, y vuelvo a ingresar para volver a buscar el mismo codigo, aparece dos, y tres, y cuatro veces la respuesta.

    Que podria ser?

    Tambien cuando quiero abrir la aplicacion en la tableta, demora muchisimo en cargar. La base de datos contiene 1.600 registros. Hay algun modo que pueda cargar la app sin que demore eternidades?

    Estare muy agradecida por sus aportes.

    ResponderEliminar
  29. Me mande este error alguien que me ayude

    05-04 19:35:36.626 1988-2011/com.veterinaria.veterinaria E/JSON Parser﹕ Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
    05-04 19:35:36.675 1988-2011/com.veterinaria.veterinaria W/dalvikvm﹕ threadid=12: thread exiting with uncaught exception (group=0x40a13300)
    05-04 19:35:36.984 1988-2011/com.veterinaria.veterinaria E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2


    gracias

    ResponderEliminar
  30. hola y gracias por tu tuto son muy buenos el hecho es que necesito imprimir todo lo de la base de dato en otra pantallapero nomas no me sale podrias ayudarme porfa

    ResponderEliminar
  31. hola.. el tutorial esta genial solo tengo una consulta no se si lo puedas contestar porque utilizas 2 archivos xml.. que es lo q hacen con cada uno de ellos?? gracias

    ResponderEliminar
  32. He copiado todo pero me da errores puesto que algunas clases estan deprecated. Como lo podemos actualizar? porque ya los metodos no son los mismos

    ResponderEliminar
  33. He seguido todos los pasos y al final cuando pongo mi url y doy al emulador se cierra la aplicación avisando de que ha ocurrido un error. En cambio, si dejo tu url todo va perfecto. Si pongo mi url en el navegador me muestra los campos correctamente. Que puede pasar? gracias saludos

    ResponderEliminar
    Respuestas
    1. Debes cambiar en la clase JSONParser method == "POST" a method.equeals("POST"), esto mismo aplica a GET.

      Eliminar
  34. estimado amigo, excelente tutorial, me funciona correctamente, podrias cambiar el codigo para poder recuperar la informacion en un ListView y no asi en un TextView, ayudaria mucho al poder hace un clik sobre el item seleccionado. Saludos desde Cochabamba Bolivia.

    ResponderEliminar
  35. hola amigo es una muy buena app nada mas quisiera preguntar como le aria para insertar datos a la BD desde la misma aplicacion... Saludos

    ResponderEliminar
    Respuestas
    1. http://cursoandroidstudio.blogspot.com.ar/2015/01/base-de-datos-remotas-login.html mira ese tuto, cuando te registras, subis datos a la bd, tu usuario y contraseña.
      Sería la misma idea.

      Eliminar
  36. Hola excelente tu ejemplo y gracias por compartirlo. Tome tu ejemplo y en vez de poner un campo de la b.d. quiero poner multiples campos en el lista view ejemplo: Codigo Nombre Telefono. y listar esos campos pero ademas ponerle encabezados al listview eso se puede??.

    ResponderEliminar
  37. Buenas!! mi nombre es Edisson; he estado implementando el codigo tal cual se lo presenta , sin embargo el archivo get_all_empresas.php no funciona adecuadamente, arroja la consulta pero con un error advirtiendo de el cambio de mysql por msqli, vi en las respuestas que hay un codigo que corregiría el error , sin embargo al implementarlo tal cual, esta vez ni siquiera hace la consulta, note que el link que se usa en la aplicacion al abrirla en el navegador funciona adecuadamente, asi que me gustaria si es posible me digan que es lo que me hace falta o que he de cambiar en ese achivo php, ya que con el de ejemplo la app funciona si coloco el propio me sale un error y se cierra
    ;; gracias por la atencion

    ResponderEliminar
  38. hola me gustaria realizar esto pero con una conexion a localhost desde wamp server para no utilizar el host; eso se puede??? gracias y saludos

    ResponderEliminar
    Respuestas
    1. Ramiro, agradecera si me pudieras ayudar. Al momento de ejecutar la app me aparece un mensaje que la app se detuvo. y nuca la abre. Si tu supieras que es o que tendria que hacer para arreglarlo te lo agradeceria!

      Eliminar
  39. Excelentes tutoriales amigo, si quisiera colocar esto en un Fragmento de Navigation Drawer. mas o menos que cambios le tendría que hacer o en que clase debo colocar esto? Gracias y disculpa.

    ResponderEliminar
  40. hola muy buen post disculpa como ingreso nuevos valores a la bd via remota ya vi tu otro tuto de listview pero ahi mismo creas la bd y agregas valores
    saludos y gracias por los tutos

    ResponderEliminar
  41. Hola, no se si mi anterior comentario si quedo publicado, espero no repetir mi duda para evitar molestias, si es el caso por favor disculpenme, tengo la siguiente duda que me esta consumiendo.

    Tengo el diguiente codigo que me funciona bien cuando mi celular esta conectado con WIFI, pero cuando me conecto con 3G la cosa cambia porque la cadena que me devuelve en la mayoria de los casos es solo de exactamente 1000 caracteres. Porque pasa esto????

    Muchas gracias y saludos. y por su puesto que FELICITO a Ramiro por este increible sitio el cual tengo en favoritos por supuesto!!


    Parte del codigo es: el siguiente
    @Override
    protected String doInBackground(String... urls) {
    RsResult="";

    //Antes de ejecutar query, primero reviso que tenga conexion a internet, sino no hago nada
    if (!RevisoConexionInternet.verificaConexion(Contexto)) {
    Toast.makeText(Contexto, "No se tiene conexión a internet, por favor compruebe sus datos.", Toast.LENGTH_LONG).show();
    return null;
    }
    else {
    try {
    return loadFromNetwork(url);
    } catch (IOException e) {
    try {
    JSONObject json = new JSONObject(RsResult);
    return RsResult;
    } catch (JSONException e1) {
    e1.printStackTrace();
    return null;
    }
    }
    }
    }

    /** Initiates the fetch operation. */
    private String loadFromNetwork(String urlString) throws IOException {
    InputStream stream = null;
    String str ="";

    try {
    stream = downloadUrl(urlString);
    str = readIt(stream, 50000);
    //str = "Error conectando a la base de datos."; //Emulando error
    } finally {
    if (stream != null && str != "") {
    stream.close();
    }
    }
    str = Html.fromHtml(str).toString();
    RsResult= str;
    return str;
    }

    private InputStream downloadUrl(String urlString) throws IOException {
    InputStream myInputStream =null;
    Uri.Builder builder = new Uri.Builder()
    .appendQueryParameter("myqueryx", QClave)
    .appendQueryParameter("Qvalor", QValor)
    .appendQueryParameter("Qvalor2", QValor2)
    .appendQueryParameter("Qvalor3", QValor3)
    .appendQueryParameter("Qvalor4", QValor4);
    String query = builder.build().getEncodedQuery();
    URL url;
    try {
    url = new URL(urlString);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestMethod("POST");

    conn.setReadTimeout(40000 );
    conn.setConnectTimeout(60000 );

    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    // this is were we're adding post data to the request
    wr.write(query);
    wr.flush();
    myInputStream = conn.getInputStream();
    wr.close();
    } catch (Exception e) {
    //handle the exception !
    //Log.d(TAG,e.getMessage());
    }
    return myInputStream;
    }

    /** Reads an InputStream and converts it to a String.
    * @param stream InputStream containing HTML from targeted site.
    * @param len Length of string that this method returns.
    * @return String concatenated according to len parameter.
    * @throws IOException
    * @throws UnsupportedEncodingException
    */
    private String readIt(InputStream stream, int len) throws IOException {
    Reader reader;
    reader = new InputStreamReader(stream, "utf-8");
    char[] buffer = new char[len];
    reader.read(buffer);
    return new String(buffer);
    }

    ResponderEliminar
  42. Hola, gracias por el tutorial, como puedo hacer que cuando haga click en algun item me guarde el ID y abra un nuevo activity con los datos relacionados al ID guardado?
    Saludos

    ResponderEliminar
  43. Muy buenos tus tutoriales!!, me han servido demasiado!!! el único inconveniente que me a dado la app que estoy haciendo es que le coloco run y ejecuta la aplicación en mi celular y la instala (se ve en el administrador de aplicaciones, por lo cual puedo borrarla) pero al momento de buscarla en el menu no aparece por ningún lado, quisas te ha pasado a ti lo mismo o tienes alguna idea de porque puede ser me dices pls, saludos!

    ResponderEliminar
  44. Hola, muy buena pagina y codigo. estoy aprendiendo android studio y me gustaria saber como colocar imagenes en la base de datos y recuperarla luego. que tipo de campo usaria para ella? gracias

    ResponderEliminar
  45. Me hizo volver loco, hasta que "descubrí" que no era "localhost", sino "mysql.hostinger.com.ar" en el db_config.php
    Ahora con acceso a la base de datos... prosigo...
    Muy bueno el tuto. Saludos.

    ResponderEliminar
  46. Hola buenas Ramiro, muy buen tutorial. Yo estoy realizando una app para android la cual necesita acceder a una base de datos, para ello, me he registrado en hostinger y he creado una base de datos, también en programado los .php correspondientes y tal, y a la hora de ejecutar la app, cuando intento acceder a la base de datos, por ejemplo para comprobar usuario y password, no llego a acceder desde el movil a la base de datos ubicada en hostinger. ¿cuál puede ser el fallo? en config.php he definido mysql.hostinger.es que es el servidor de hostinger donde se ubica mi base de datos y mis .php. y en la app de android he puesto una url con el siguiente esquema : http://midominio.es/nombrefichero.php y no consigo acceder a la base de datos, sin embargo, si lo hago con un servidor local por localhost si puedo, por lo tanto he llegado a la conclusión de que quizás con hostinger no tenga servicio gratuito para acceder a la base de datos desde la app de mi móvil. no? espero que puedas hecharme una mano, estoy muy atascado en este tema :( .
    Un saludo y gracias por adelantado.

    ResponderEliminar
  47. Ramiro, excelente tutorial. Soy muy nuevo en Android Studio, segui todos tus pasos pero tengo errores, y no se como encararlos para resolverlos. No se los significados de los colores, palabras subrajadas, etc. Por ejemplo, en el MayActivity.java en la linea 5, (import android.support.v7.app.ActionBar;) ese "ActionBar" me aparece en rojo. Lo mismo con la siguiente linea "ActionBarActivity". Tengo que instalar algo? Estaria bueno armar un tuto para resolver errores. Saludos...

    ResponderEliminar
  48. Ramiro, te escribi toda una carta a los reyes y cuando le di publicar no se publico porque no estaba firmado con mi usuario de google :_(

    En resumen me podrias ayudar en mi duda, te la describi algunas preguntas arriba, gracias y saludos y felicidades.!!!

    ResponderEliminar
  49. hola Ramiro saber como hacer para listar imageness de una base de datos remota ¿??? gracias de antemano la ayuda.....

    ResponderEliminar
  50. Hola Ramiro, excelentes tutos, pero quisiera saber como se puede trabajar con imágenes, ya que los campos trabajados hasta el momento son solamente varchar o string. Te agradecería mucho si nos ayudas con esto de las imágenes, como se deben guardar en la bd y como se pueden extraer desde android. Soy un fiel seguidor, me han servido de mucho todos tus videos...

    ResponderEliminar
  51. Me sumo a la peticion de como obtener imagenes desde la db, o una url especifica donde tenga guardada una imagen. Encontre un codigo para decodificar imagenes desde una url pero cuando quiero adaptarla en tu proyecto me sale error al asignar setImageBitmap y estoy trabado en eso. Ojala puedas tener tiempo para ayudarnos. Gracias

    ResponderEliminar
  52. Hola Gabriel, ya pudiste trabajar con imágenes?

    ResponderEliminar
    Respuestas
    1. No todavia, pero me dijeron que puedo usar la libreria Glide o Picasso para hacerlo automaticamente, aunque todavia no las he visto. Vos como vas?

      Eliminar
    2. sigo en la busqueda..., cualquier cosa te aviso.

      Eliminar
    3. He estado consultando y lo que encuentro es una librería llamada volley, creo que es el camino a seguir para trabajar con webservice,

      Eliminar
    4. si juan, vi esa libreria. Lo que estuve viendo es la libreria picasso, me gusto porque en una sola linea de codigo, podes convertir la url donde esta almacenada la imagen y colocarla en un ImageView, pero todavia no puedo hacer que se cargue mi listview con la imagen y los datos almacenados siguiendo este codigo de Ramiro, quiza sea una pavada, pero es que soy muy novato en esto de Android Studio.

      Eliminar
  53. Hola Ramiro un gusto saludarte y ante nada decirte gracias , por otro lado pordrias armar un tuto pero con mas opciones , ejemplo consultar ,eliminar,modificar, opciones de navegación siguiente y atras , tambien como hacer para que en cada consulta pueda mostrar una imagen en relación a la consulta , por ejemplo si es un logueo de personas que cuando yo consulte por pepito aparte de mostrarme los datos de pepito también muestre su foto por ejemplo , bueno si alguien quiere hacerlo conmigo estudiarlo juntos solo agregarme al skype sebastian.tamay.arg , busco gente de cualquier parte del mundo que se una en proyectos de creación y estudio de todo android soy novato vivo y trabajo ( sistemas ) en Lima Peru soy Argentino , solo gente preferente con algo de conocimiento y experiencia la idea es hacer juntos y avanzar no se tanto como para enseñar eso se lo pido a Ramiro que es el experto , bueno saludos espero me contacten , gracias.

    ResponderEliminar
  54. Muchas gracias viejo. Saludos

    ResponderEliminar
  55. Hola, me sale el error E/JSON Parser﹕ Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject

    podrías ayudarme por favor

    ResponderEliminar
  56. Hola amigo, buenas noches! Me gustaría enseñar a hacer el mismo proyecto pero, en lugar de la base de datos puede controlar de forma remota, se controla desde el que se acceda, y tienen la parte principal que muestra los "textos", publicado por el usuario que ha iniciado sesión .
    Gracias, espero respuestas. Enhorabuena por el blog, tiene suficiente reconocimiento, porque yo soy Itaboraí, RJ, Brasil y conozco y admiro su trabajo.
    Abrazo.

    ResponderEliminar
  57. Hola Ramiro buen tutorial debo decirte que todo ha sido muy entretenido he comenzado a conocer la programacion en android y he podido llevar tu tutorial y desarrolarlo en eclipse , pero tengo una duda que aunque puede ser basica para muchos no puedo solucionarla,el programa me ha salido casi a la perfeccion solo que no puedo mostrar mas campos en mi listview y aunque he seguido los pasos que indicas solo me muestra uno, te agradeceria un poco de ayuda o a los amigos que te siguen,ya que imagino que esa ya ha sido una tarea superada por muchos
    de antemano agradecido

    ResponderEliminar
  58. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  59. Muy bueno el tuto :D, tengo un error al abrir el archivo "get_all_empresas.php" en el explorador me muestra...
    Warning: require_once(/hsphere/local/home/c365312/autocarcancun.com/webServiceApp/db_connect.php): failed to open stream: No such file or directory in /hsphere/local/home/c365312/autocarcancun.com/webServiceApp/get_all_empresas.php on line 11 Fatal error: require_once(): Failed opening required '/hsphere/local/home/c365312/autocarcancun.com/webServiceApp/db_connect.php' (include_path='.:/hsphere/shared/php53/include/php/PEAR') in /hsphere/local/home/c365312/autocarcancun.com/webServiceApp/get_all_empresas.php on line 11

    Entiendo que no esta encontrando el archivo "db_connect.php".
    el tuto me salió a la perfección, pero este error me salio cuando lo intente en otro hosting :/ gracias de antemano.

    ResponderEliminar
  60. Disculpa amigo! excelente tuto solo que tengo un problema los datos no me los muestra en el list y no me marcar ningun error, decasualidad sabras cual es el problema :D de antemano gracias :D

    ResponderEliminar
  61. Hola que tal Ramiro,
    tu tutorial me parece excelente.
    ¿Como seria si lo que yo quiero es por medio de la accion de un boton accesar a la base de datos, extraer la informacion de un campo y ponerla en un textView?

    Muchas gracias de antemano
    Saludos!
    Roberto Gonzalez

    ResponderEliminar
  62. Buenos dias ramiro, seguí tus pasos en el tutorial donde cambias el sistema de conexión de la base de datos a config.inc.php, y este tipo de consultas no funciona con el otro metodo, quiero haces exactamente lo que haces aqui, que te traes todos los datos de todas filas y las columnas de la base de datoos, como lo hago con la configuracion de config.inc.php? gracias de antemano al q me pueda ayudar

    ResponderEliminar
  63. Respuestas
    1. Espectacular. Gracias por comentar. Así los lectores ven que si funciona.

      Eliminar
  64. Estimado Ramiro, tengo problemas en todas las import org.apache.http.NameValuePair; de tipo apache, por favor, es lo único en lo que estoy topando

    ResponderEliminar
  65. Tengo el siguiente problema;
    Error:(5, 23) error: package org.apache.http does not exist
    Alguien que pueda solucionarlo...

    ResponderEliminar
  66. Que tal fijate que cuando cargo la base de datos me da este mensaje:
    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u822109086/public_html/malaria/db_connect.php on line 28

    y cuando intento verlo en android!!! no me deja ver nada!!!

    ResponderEliminar
  67. Cordial saludo desde Colombia,
    Te comento que soy demasiado nuevo en este mundo, pero tengo el inconveniente que estoy utilizando la API 23 y he leido esto (https://developer.android.com/intl/es/preview/behavior-changes.html):

    Eliminación del cliente HTTP de Apache
    Esta versión preliminar elimina el soporte del cliente HTTP de Apache. Si su aplicación utiliza este cliente y tiene como destino Android 2.3 (API de nivel 9) o una versión posterior, use, en su lugar, la clase HttpURLConnection. Esta API es más eficaz porque reduce el uso de la red mediante compresión y almacenamiento de respuesta en caché transparentes, y minimiza el consumo de energía. Para continuar utilizando las API HTTP de Apache, primero debe declarar la siguiente dependencia en tiempo de compilación en su archivo build.gradle:

    android {
    useLibrary 'org.apache.http.legacy'
    }
    Android está migrando de la biblioteca OpenSSL a BoringSSL . Si utiliza Android NDK en su aplicación, no vincule bibliotecas criptográficas que no forman parte de la API de NDK, como libcrypto.so y libssl.so. Estas bibliotecas no son API públicas y se pueden modificar o interrumpir sin aviso en todas las versiones y todos los dispositivos. Además, puede exponerse a vulnerabilidades de seguridad. En cambio, modifique su código nativo para llamar a las API de criptografía de Java a través de JNI o para vincular estáticamente una biblioteca criptográfica de su elección.

    Si alguien tiene un ejemplo de como me conecto con este metodo le gradeceria mucho.

    ResponderEliminar
  68. Hola, excelente tus tutoriales, muchos exitos

    Consulta. Es posible en vez de usar la base de datos se pueda usar el excel del drive?

    ResponderEliminar
  69. como importar la extencion: import org.apache.http.NameValuePair; ?????????\

    ResponderEliminar
  70. Holaa... tengo problemas aca.. quien me podria ayudar... tengo que instalar el Mysql ? porque lo conectare a una web remota.

    import org.apache.http.NameValuePair;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.utils.URLEncodedUtils;
    import org.apache.http.impl.client.DefaultHttpClient;


    ResponderEliminar
    Respuestas
    1. Descarga los componentes de apache y copia el archivo en la carpeta libs http://www.java2s.com/Code/Jar/a/Downloadapachehttpcomponentshttpcorejar.htm

      Eliminar
    2. también use una linea de código que me sincronizo muchas librerías
      en......... buil.gradle(Module: app)

      dependencies {

      ==>>>> android { useLibrary 'org.apache.http.legacy'} <<<<====

      }

      Eliminar
    3. hola! soy muy nuevo en este tema y tenia el mismo problema, lo intente solucionar con esos metodos y tampoco me funciono. Lo dejo por si a alguien le sirve (No hace falta descargar los componentes), solo hacer lo siguiente..


      En el archivo /build.gradle insertar esto:

      dependencies {
      classpath 'com.android.tools.build:gradle:1.3.1'
      }

      Y en el archivo /app/build.gradle (mirar bien, que no es el anterior), esto:

      android {
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
      ...
      useLibrary 'org.apache.http.legacy'
      ...
      }
      compilar, y listo. yo lo he podido solucionar de esa forma.

      Un saludo!!

      Eliminar
  71. Tengo estos dos errores en compilacion... alguna sugerencia uso las ultimas versiones
    Error:duplicate files during packaging of APK D:\AdroidProjects\MyApplication\app\build\outputs\apk\app-debug-unaligned.apk

    Error:Execution failed for task ':app:packageDebug'.
    > Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: D:\AdroidProjects\MyApplication\app\libs\apache-httpcomponents-httpcore.jar
    File 2: D:\AdroidProjects\MyApplication\app\libs\apache-httpcomponents-httpclient.jar

    ResponderEliminar
  72. hola Ramiro felicidades por tus tutoriales que nos ayudan a muchos a crecer en este campo de programación android siendo una maravilla poder programar y plasmar lo que imaginamos, bueno soy nuevo en programación y mas en esto de php y conexiones remotas seguí todo al pie de la letra de los tutos y al momento de probar me dio un mensaje pero si salio los datos de las tablas y al conectar con la app se cerro automáticamente se detuvo.....

    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u699445080/public_html/conect/db_connect.php on line 28
    {"empresas":[{"id":"1","nombre":"emp1"},{"id":"2","nombre":"emp2"}],"success":1}

    como podría solucionarlo? entre a Tu enlace y funciona perfectamente copie el link y lo probé con éxito en el listview, pero al probar mi link se detiene al instante, a lo que entendí del mensaje es que ya no acepta conexiones mysql, otra vez felicidades por compartir tus conocimientos con todos GRACIAS!!!!

    ResponderEliminar
    Respuestas
    1. Hola Will, tengo exactamente el mismo problema. Si tienes alguna información te agradecería si es que me la compartes.
      De ante mano Gracias !

      Eliminar
    2. El problema esta en el php, en lugar de utilizar mysql_connect utilicen mysqli_connect o PDO. Saludos

      Eliminar
  73. Como se puede insertar las imagenes en la lista? Y como se puede llamar a otro Intent con un clic a un componente de la lista?

    ResponderEliminar
    Respuestas
    1. tal vez esto te sirva http://cursoandroidstudio.blogspot.com.ar/2014/07/listview-llama-otra-clase.html

      Eliminar
    2. y este trabaja con imagenes locales http://cursoandroidstudio.blogspot.com.ar/2015/05/proyecto-turismo.html

      Eliminar
  74. Alguien sabe, como podria obtener un item seleccionado??

    ResponderEliminar
    Respuestas
    1. tal vez esto te sirva http://cursoandroidstudio.blogspot.com.ar/2014/07/listview-llama-otra-clase.html

      Eliminar
    2. Hola Ramiro, gracias por responder, me he guiado de tu tutorial y he podido crear la aplicacion, solo le he hecho unos cambios, como agregarle unos cuantos textview mas al archivo "single_post"; todo funciona bien, lo que quiero hacer ahora es que cuando seleccione uno de los item del listview, me envie a otra actividad con los datos de los textview del item seleccionado, he tratado de implementar el "setOnItemClickListener", pero no me funciona, que podria hacer?. Saludos!.

      Eliminar
    3. Hola, requiero ayuda con algo similar... alguien sabe como?

      Eliminar
  75. Hola Ramiro, he estado siguiendo tus tutoriales y siguiendo este curso y estoy haciendo una aplicación donde muestre en una actividad un listview con departamentos y luego al seleccionar uno de ellos en otra actividad muestre en otro listview personas que pertenecen a ese departamento pero en algunos casos el procedimiento funciona bien y en otras no por ej. a veces al seleccionar un departamento y pasar a la actividad de personas vuelve a mostrar el listado de departamentos cuando debería mostrar personas, el resto de UI funciona bien, entonces el problema esta en la parte de consulta a la bd remota y del AsyncTask, pero lo he notado en versiones más recientes de Android, habrá alguna manera de corregir ese inconveniente? de antemano muchas gracias por la información y muy buen post me ha servido de mucho

    ResponderEliminar
    Respuestas
    1. y otra duda también en otra app estoy usando un mapa de google pero en versiones muy recientes de android no funciona se queda en blanco el mapa, quise utilizar la versión 8.3.0 de google play services pero genera un error la sincronización de gradle, y si la bajo a la version 7.5.0 funciona adecuadamente pero lamentablemente en un galaxy s6 no se puede ver el mapa, como podría corregirse este error

      Eliminar
  76. Necesito algun tipo de librerias o package
    por que me marca errores en varios import

    ResponderEliminar
  77. Gracias por la información que esta muy bueno... me fue de mucha utilidad.
    Quería saber como muestro en la lista por un nombre determinado en vez de mostrar todo lo que esta registrado en la base de datos.

    ResponderEliminar
  78. las librerias no sabe cuales son es que me marca error en las librerias

    ResponderEliminar
    Respuestas
    1. Me pasó lo mismo. Proba esto, pone el cursor sobre el nombre de la librería que te marque error (en rojo), alt+intro > Find JAR on web, te aparecerá una pequeña ventana con los archivos JAR, seleccionas el que necesites, lo guardas y listo. A mi me funcionó.
      Espero que te sirva Saludos!

      Eliminar
  79. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  80. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  81. Pude importar las librerias, el código ya no me marca con errores... pero al ejecutar el emulador me salta esto "ZipException: duplicate entry: org/apache/http/ProtocolException.class" y no encuentro solución.

    ResponderEliminar
  82. Hola porfavor puede ayudarme para ver como añado las librerias de apache porfavor

    ResponderEliminar
    Respuestas
    1. Solo descarga las libreria http-core 4.0 ,y luego en donde tengas la direccion de android sutdio c/user/etc,hasta que estes en la carpeta libs ahi pega la libreria,luego te vas al archivo bulid o config(lo encuentras debajo dodne esta el android manifiest.xml me parece algo asi y escribes tal cual como se llama la libreria y listo guardas y ya no no debes tener erroes

      Eliminar
  83. Ramiro me sale un error al correr la app se detiene y me sale este aviso:

    FATAL EXCEPTION: main
    Process: com.example.johangutierrez.leercomentariosdbremota2, PID: 3325
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.johangutierrez.leercomentariosdbremota2/com.example.johangutierrez.leercomentariosdbremota2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference

    ResponderEliminar
    Respuestas
    1. ActionBar actionBar = getSupportActionBar();
      // actionBar.setDisplayHomeAsUpEnabled(true);

      comente esta linea y ahora si aparecen las empresas q añadí a la base de datos

      Eliminar
    2. ActionBar actionBar = getSupportActionBar();
      // actionBar.setDisplayHomeAsUpEnabled(true);

      comente esta linea y ahora si aparecen las empresas q añadí a la base de datos

      Eliminar
  84. Ramiro me sale un error al correr la app se detiene y me sale este aviso:

    FATAL EXCEPTION: main
    Process: com.example.johangutierrez.leercomentariosdbremota2, PID: 3325
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.johangutierrez.leercomentariosdbremota2/com.example.johangutierrez.leercomentariosdbremota2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference

    ResponderEliminar
  85. Por favor me pueden ayudar deseo que un valor de la base de datos me aparezca en un textview y no en el listview, si alguien sabe como hacerlo se lo agradeceria..!!!

    ResponderEliminar
  86. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  87. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  88. por si alguien tiene problemas con php 5.6.14 o superior la solucion es esta link del archivo ya que sino da un error en app de android
    https://www.dropbox.com/s/x4xydfy8fgybm2f/get_all_empresas.php?dl=0

    ResponderEliminar
  89. Bueno días donde agrego la librería apache para importar. lo de apache un tutorial gracias

    ResponderEliminar
  90. como le ago para que agregue las librerias de apache por que me marca error en ellas en los import sale como si estuvieran comentadas esas lineas

    ResponderEliminar
    Respuestas
    1. Yo lo solucione modificando el Build.gradle agregando

      useLibrary 'org.apache.http.legacy' ... y

      compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

      Eliminar
  91. Hola Ramiro, tienes algún email o algo asi, vae , te envio lo que pasa por aqui, en el momento de intentar acceder desde la linea del buscador para que me enseñe sin formato el contenido de la tabla que estoy accesando, es decir antes de ir a Android, cuando se supone que ya has subido los archivos en Hostinger, en Ftp2, vale, pues me sale este error:


    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u..My BD/public_html/My directorio/db_connect.php on line 28

    Warning: mysql_connect(): Access denied for user 'u...miusuario'@'10.2.1.14' (using password: YES) in /home/u..../public_html/my directorio/db_connect.php on line 28
    Access denied for user 'u..my usuario'@'10.2.1.14' (using password: YES)
    Warning: mysql_close(): no MySQL-Link resource supplied in /home/my BD/public_html/my directorio/db_connect.php on line 42

    ResponderEliminar
    Respuestas
    1. a mi me ocurre lo mismo, has podido solucionarlo?

      Eliminar
  92. holaaa tengo problema con esto,alguien que pueda ayudarme

    import org.apache.http.NameValuePair;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.utils.URLEncodedUtils;
    import org.apache.http.impl.client.DefaultHttpClient;

    ResponderEliminar
    Respuestas
    1. Solucion 100% con este video
      https://www.youtube.com/watch?v=SlrnoNY8_vU

      Eliminar
    2. Hola! más rápido aún, añade lo siguiente al archivo build.gradle (Module: app) dentro del apartado dependencies

      compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

      Eliminar
    3. Muchas Gracias!!! me sirvio un montón. Saludos

      Eliminar
  93. Me podrias dar una mano para crear un menu con los datos traidos de una base de datos? La idea es que sea un menu desplegable (Vertical) con submenus,

    ResponderEliminar
  94. Hola una pregunta como podria usar volley o glide para cagar un listview personalizado donde tenga una imagen, un texto y un segundo texto por así decirlo pero que sobre todo de la base de datos no cargue el 100 % de los resultados si no que los cargue conforme movamos el listview hacia abajo (podria ser un recicler view)

    ResponderEliminar
  95. con todo mi respeto eres el "puto amo" te lo digo con todo el cariño del mundo, solo con tu codigo pude resolver por fin mi problema muchas gracias :)

    ResponderEliminar
  96. Recién empiezo, estuve viendo ejemplos y quisiera unir este ejemplo a otro con fragments. El problema es que se manejan distinto que los activity y me trabo bastante. ¿Tenés algún ejemplo o algo que pueda leer sobre como mostrar lo que viene de la base de datos en un fragment?, ¿alguno del grupo me puede tirar un link?

    Muchas gracias y felicitaciones por el material, está excelente y no abunda, así que fue un placer encontrar este lugar.

    ResponderEliminar
  97. Buen tutorial , pero me gustaria saber en que carpeta de android studio de mi proyecto se ponen los php de la conexión, un saludo y gracias!!

    ResponderEliminar
  98. Hola , quisiera conectarme con gente que quiera formar un grupo de estudio y proyecto para hacer en conjunto app de todo tipo , lo importante es ser compañeros tener algo de conocimientos y mucha pasión para hacer grandes proyectos , si a alguien que le interese sea de la parte del mundo que sea contacten por skype : sebastian.tamay ( soy de Argentina y en mi foto de perfil estoy riendo ) sino dejen aca y los agrego yo , saludos ! Me gustaria encontrar gente como yo que sueña que se pueden hacer realidad grandes ideas ,los espero .

    ResponderEliminar
  99. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  100. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  101. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  102. Hola que tal buen dia! :)
    amm! tengo una duda esto se podria utlizar
    para MSSQL, y en caso de que se pudiera usar
    podria usar la ip sel servidor, en lugar de usar
    la url que se maneja?...

    Pd: se que he eliminado muchos comentarios y es por que encuentro la solución.


    Gracias!!! :3

    ResponderEliminar
  103. hola Ramiro, tengo problemas para ejecutar el proyecto tal cual has hecho tu, me salen estos errores y no logro entender por donde esta el error dado que lo he hecho asi como has explicado

    ResponderEliminar
  104. 03-16 19:51:00.242 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:142)
    03-16 19:51:00.242 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
    03-16 19:51:00.242 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
    03-16 19:51:00.242 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
    03-16 19:51:00.242 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
    03-16 19:51:00.242 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
    03-16 19:51:00.243 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
    03-16 19:51:00.243 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at com.prueba.ccam_tec.base_de_datos_remota.JSONParser.makeHttpRequest(JSONParser.java:62)
    03-16 19:51:00.243 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at com.prueba.ccam_tec.base_de_datos_remota.MyActivity$LoadAllProducts.doInBackground(MyActivity.java:94)
    03-16 19:51:00.243 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at com.prueba.ccam_tec.base_de_datos_remota.MyActivity$LoadAllProducts.doInBackground(MyActivity.java:72)
    03-16 19:51:00.243 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:292)
    03-16 19:51:00.243 2522-2550/com.prueba.ccam_tec.base_de_datos_remota W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    03-16 1

    ResponderEliminar
  105. agradeceria me puedas dar una mano con ello.

    Osvaldo

    oapapereira@gmail.com

    ResponderEliminar
  106. Ramiro,
    Muchas Gracias por tus videos. Por favor, ¿podrías prepararlos un poco más antes de hacerlos? Son muy improvisados y hacen que perdamos mucho tiempo mirándolos para extraer el poco conocimiento que aportan. Ayudanos siendo más profesional. Eructar o decir "ay!, me duele la panza" no aportan nada. Tocarse la nariz: Prohibido!!
    Muchas Gracias!!!

    ResponderEliminar
    Respuestas
    1. No hay tiempo para prepararlos, porque me lleva el doble de tiempo.

      Eliminar
  107. HOla! las siguientes librerias no me las agarra al pegarlas en el JSONParser.java :

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.utils.URLEncodedUtils;
    import org.apache.http.impl.client.DefaultHttpClient;

    Que debería hacer para que se compile sin falla? o como las instalo? Soy nuevo en esta programación y me gustaría aprender , Gracias!

    ResponderEliminar
  108. hola. consulta. al hacer el get_empresas y probarla en mi buscado me da como resultado lo siguiente:

    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u912242161/public_html/ramiroconnect/db_connect.php on line 28

    y los datos q tengo cargados en mi base de datos.

    Como puedo hacer para que solo me aparezca mis datos y no el mensaje anterior?

    ResponderEliminar
  109. Buenos días y muchas gracias por traer tanta luz a estas pantallas... Solo una consulta, quizás solo es teórica. No entiendo por que el connect(db_connect.php) está del lado del servidor, entonces cualquiera que apunte una consulta a la dirección http://basededatosremotas.meximas.com/ramiroconnect/get_all_empresas.php va a obtener las empresas sin saber la clave de la base de datos? si esto es así, como hacemos para enviar los datos en la petición? , disculpen las molestias, saludos y gracias

    ResponderEliminar
  110. una consulta yo deseo subir una foto desde el android y alojarlo en un host como puedo hacerlo podrias hacer un tuto al respecto y la foto que se eliga ya sea desde la galeria o desde la camara

    ResponderEliminar
  111. Hola, requiero ayuda para obtener el item seleccionado, alguien que pueda colaborarme, es muy urgente.

    ResponderEliminar
  112. Ramiro.

    Agradezco mucho este material. Soy nuevo en esta área y realizando este taller me encuentro que genera un error en el JSON donde dice que las librerias org.apache no existen. Disculpa pero me podrías ayudar indicando que hacer. Gracias!!!

    ResponderEliminar
    Respuestas
    1. Enviame un mensaje a mi correo ronaldorivero3@gmail.com te paso la librería

      Eliminar
  113. Hola Ramiro:
    Actualicé a la versión de Android Studio 2.1 y la libreria JSONParser.java da error. ¿Me podrías decir que hay que modificar con la nueva versión? Gracias

    ResponderEliminar
    Respuestas
    1. Te sale error al compilar o error antes de compilar

      Eliminar
  114. Tenía la versión 1.5 y todo funcionaba perfecto. Muy buenos tutoriales.

    ResponderEliminar
  115. Indagando por la web se me ha solucionado de momento:
    En el build.gradle (de la app), en dependencies, añadir esta línea:
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
    Darle a sincronizar y listo

    ResponderEliminar