http://basededatosremotas.meximas.com/ramiroconnect/get_all_empresas.php
Puede acceder desde acá a HOSTINGER
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>
Estupendo tutorial y muy detallado!
ResponderEliminarMuchas 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
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.
EliminarYo 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
Este comentario ha sido eliminado por el autor.
EliminarSaludos 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 ..
ResponderEliminarestoy armando el tuto de google maps, después me pongo con eso
EliminarRamiro, no se si ya lo tendrás acabado, pero no lo veo por ningún sitio, seguro que es estupendo. Gracias
EliminarEste comentario ha sido eliminado por un administrador del blog.
ResponderEliminarHola Ramiro, excelentes videos he!.
ResponderEliminaruna 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ú
Solo he trabajado con mysql, ahora que estoy mirando windows phone tal ves te pueda dar una respuesta.
EliminarPara 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.
EliminarAquí 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.
hola Ramiro me podrias ayudar tengo un problema, al momento de visualizar los datos me aparece como NULL
ResponderEliminar"id":null
"nombre":null
de antemano muchas gracias
no me ha pasado eso, pero revisa el tuto, debe ser algo pequeño que esta esta faltando
EliminarComprueva las mayusculas y minusculas en los nombres de los campos
EliminarHola, los registros que tratas de recuperar poseen tildes o contienen palabras con la letra "ñ"?
EliminarSi 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.
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:
ResponderEliminarProbe 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!!!
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.
ResponderEliminarHas declarado todo en el AndroidManifest.xml?
Eliminarsi 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.
EliminarHola 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.
ResponderEliminarAsi 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.
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???
EliminarYo hice algo como esto:
params.add("nombre=emp1");
pero no funciono, de hecho me cuelga la aplicacion.
Alguna sugrerencia???
Bueno como bien cabeza dura y ansioso que soy despues de buscar y buscar di con la respuesta. La dejo para quien la nesecite:
EliminarList 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.
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.
EliminarAgradeceré infinitamente tu apoyo amigo, gracias...
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
EliminarHola que tal?
EliminarLograron ponerle imagenes al ListView? Saludoss
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
ResponderEliminarPor 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)
Por un lado tendrias que guardar los datos de la ultima conexion en el telefono.
EliminarHay 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.
Muchas gracias Cristian un saludo crack :)
EliminarMe esta saliendo el siguiente error
ResponderEliminarDeprecated: 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?
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.
Eliminarhttp://www.hostinger.es/forum/scripts-y-fragmentos-de-codigo/551-tut-como-usar-mysql-en-php.html
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..."
ResponderEliminarPodrías cambiar el codigo de conexion mysql a mysqli ?
Un millon de Gracias. Son muy buenos tus tutoriales.
Coloca para una @ antes omite esas notificaciones eso no es error así es que mysql esta obsoleto @mysql_connect():
EliminarColoca para una @ antes omite esas notificaciones eso no es error así es que mysql esta obsoleto @mysql_connect():
EliminarGracias douglas
EliminarQue tal Ramiro ese mismo error:
ResponderEliminarDeprecated: 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
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.
ResponderEliminarDe 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.
En el caso del MainActivity
Eliminarusas 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)...
Este comentario ha sido eliminado por el autor.
ResponderEliminarRafel C.F26 de febrero de 2015, 8:43
ResponderEliminarVereis, 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
Lo consegui
EliminarHola, alguien ha podido resolver lo de la conexion?
ResponderEliminarSaludos!
Si daniel, a la primera, lo que no consigo es que me lea los datos, http://cadetes.esy.es/conexion/jugadores.php
EliminarPodriais decir como pulsando se abre un activiy? E visto tu tuto pero es un listview simple y no se al ser SQL
ResponderEliminarHola 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.
ResponderEliminarGracias...
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..
ResponderEliminarhola monica yo tengo el mismo problema lo pudiste solucionar ?
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarGracias 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.
ResponderEliminarget_all_empresas.php :
<?php
ResponderEliminar$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 :)
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/
Eliminarget_all_empresas.php on line 7). Gracias y espero que me puedas ayudar!
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
EliminarEste comentario ha sido eliminado por el autor.
EliminarEste comentario ha sido eliminado por el autor.
EliminarOk, ya logré solucionar el error por si a alguien le interesa.
EliminarLa 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
Continua de arriba :)
ResponderEliminarif (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);
}
?>
Tremendo aporte! Funciona perfectamente! Muchisimas gracias!
EliminarMuchas gracias Porfi López
Eliminarholadisculpeme prodian ayudar me marac un erro el codifo q sera
EliminarParse 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);
}
?>
ya encontre mi error gracias
Eliminarrevise nuevamente los dos codigo y havia algo mal por cierto muy buenos estos tuto me ha ayudado mucho con la tesis
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!
EliminarPD: tu codigo de php me sirvio mucho. Muchas Gracias
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
EliminarHola Ramiro de ante mano gracias por los tutoriales, estan muy buenos. Seguí todos los pasos y la api no levanta, me sale el error:
ResponderEliminarerror en doInBackground Caused by: java.lang.NullPointerException
Me podrías ayudar con eso. Gracias y saludos desde Perú.
Hola Deivy, en el archivo JSONParser cambia method == "GET" y POST por method.equal("GET") y POST respectivamente.
EliminarEspero que te sirva.
Saludos
el error yo lo solucione corrigiendo el archivo php
Eliminar0) {
$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);
}
?>
Hola Ramiro, muchas gracias por los turoriales. Al seguir tu ejemplo me daban los siguientes errores:
ResponderEliminarE/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
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
ResponderEliminarPara cargar o subir información debería ver este tutorial
Eliminarhttp://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
Este comentario ha sido eliminado por el autor.
EliminarRamiro, 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
EliminarNo 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..
EliminarEs 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.
Ramiro muchasssssssss gracias por tu tiempo, voy a intentarlo y cualquier cosa lo comento. un saludo
EliminarQue tal, oye una pregunta habra otra forma de crear la conexion porque me marca como obsoletas las clases de apache
ResponderEliminarEste comentario ha sido eliminado por el autor.
EliminarSolucionado
EliminarEn 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"
Buenas noches.
ResponderEliminarEstoy 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.
Me mande este error alguien que me ayude
ResponderEliminar05-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
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
ResponderEliminarhola.. 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
ResponderEliminarHe copiado todo pero me da errores puesto que algunas clases estan deprecated. Como lo podemos actualizar? porque ya los metodos no son los mismos
ResponderEliminarHe 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
ResponderEliminarDebes cambiar en la clase JSONParser method == "POST" a method.equeals("POST"), esto mismo aplica a GET.
Eliminarestimado 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.
ResponderEliminarhola amigo es una muy buena app nada mas quisiera preguntar como le aria para insertar datos a la BD desde la misma aplicacion... Saludos
ResponderEliminarhttp://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.
EliminarSería la misma idea.
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??.
ResponderEliminarBuenas!! 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
ResponderEliminar;; gracias por la atencion
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
ResponderEliminarSi, tranquilamente.
EliminarRamiro, 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!
EliminarExcelentes 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.
ResponderEliminarhola 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
ResponderEliminarsaludos y gracias por los tutos
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.
ResponderEliminarTengo 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);
}
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?
ResponderEliminarSaludos
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!
ResponderEliminarHola, 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
ResponderEliminarMe hizo volver loco, hasta que "descubrí" que no era "localhost", sino "mysql.hostinger.com.ar" en el db_config.php
ResponderEliminarAhora con acceso a la base de datos... prosigo...
Muy bueno el tuto. Saludos.
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 :( .
ResponderEliminarUn saludo y gracias por adelantado.
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...
ResponderEliminarRamiro, 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 :_(
ResponderEliminarEn resumen me podrias ayudar en mi duda, te la describi algunas preguntas arriba, gracias y saludos y felicidades.!!!
hola Ramiro saber como hacer para listar imageness de una base de datos remota ¿??? gracias de antemano la ayuda.....
ResponderEliminarHola 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...
ResponderEliminarMe 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
ResponderEliminarHola Gabriel, ya pudiste trabajar con imágenes?
ResponderEliminarNo todavia, pero me dijeron que puedo usar la libreria Glide o Picasso para hacerlo automaticamente, aunque todavia no las he visto. Vos como vas?
Eliminarsigo en la busqueda..., cualquier cosa te aviso.
EliminarHe estado consultando y lo que encuentro es una librería llamada volley, creo que es el camino a seguir para trabajar con webservice,
Eliminarsi 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.
EliminarHola 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.
ResponderEliminarMuchas gracias viejo. Saludos
ResponderEliminarHola, 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
ResponderEliminarpodrías ayudarme por favor
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 .
ResponderEliminarGracias, espero respuestas. Enhorabuena por el blog, tiene suficiente reconocimiento, porque yo soy Itaboraí, RJ, Brasil y conozco y admiro su trabajo.
Abrazo.
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
ResponderEliminarde antemano agradecido
Este comentario ha sido eliminado por el autor.
ResponderEliminarMuy bueno el tuto :D, tengo un error al abrir el archivo "get_all_empresas.php" en el explorador me muestra...
ResponderEliminarWarning: 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.
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
ResponderEliminarHola, pudiste resolver dicho problema?
EliminarHola que tal Ramiro,
ResponderEliminartu 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
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
ResponderEliminarExcelente, funciono correctamente..
ResponderEliminarEspectacular. Gracias por comentar. Así los lectores ven que si funciona.
EliminarEstimado Ramiro, tengo problemas en todas las import org.apache.http.NameValuePair; de tipo apache, por favor, es lo único en lo que estoy topando
ResponderEliminarya pudiste? tengo el mismo problema
EliminarTengo el siguiente problema;
ResponderEliminarError:(5, 23) error: package org.apache.http does not exist
Alguien que pueda solucionarlo...
Que tal fijate que cuando cargo la base de datos me da este mensaje:
ResponderEliminarDeprecated: 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!!!
Cordial saludo desde Colombia,
ResponderEliminarTe 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.
Hola, excelente tus tutoriales, muchos exitos
ResponderEliminarConsulta. Es posible en vez de usar la base de datos se pueda usar el excel del drive?
como importar la extencion: import org.apache.http.NameValuePair; ?????????\
ResponderEliminarHolaa... tengo problemas aca.. quien me podria ayudar... tengo que instalar el Mysql ? porque lo conectare a una web remota.
ResponderEliminarimport 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;
Descarga los componentes de apache y copia el archivo en la carpeta libs http://www.java2s.com/Code/Jar/a/Downloadapachehttpcomponentshttpcorejar.htm
Eliminartambién use una linea de código que me sincronizo muchas librerías
Eliminaren......... buil.gradle(Module: app)
dependencies {
==>>>> android { useLibrary 'org.apache.http.legacy'} <<<<====
}
Buen aporte Will Torner
Eliminarhola! 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..
EliminarEn 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!!
Tengo estos dos errores en compilacion... alguna sugerencia uso las ultimas versiones
ResponderEliminarError: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
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.....
ResponderEliminarDeprecated: 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!!!!
Hola Will, tengo exactamente el mismo problema. Si tienes alguna información te agradecería si es que me la compartes.
EliminarDe ante mano Gracias !
El problema esta en el php, en lugar de utilizar mysql_connect utilicen mysqli_connect o PDO. Saludos
EliminarComo 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?
ResponderEliminartal vez esto te sirva http://cursoandroidstudio.blogspot.com.ar/2014/07/listview-llama-otra-clase.html
Eliminary este trabaja con imagenes locales http://cursoandroidstudio.blogspot.com.ar/2015/05/proyecto-turismo.html
EliminarAlguien sabe, como podria obtener un item seleccionado??
ResponderEliminartal vez esto te sirva http://cursoandroidstudio.blogspot.com.ar/2014/07/listview-llama-otra-clase.html
EliminarHola 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!.
EliminarHola, requiero ayuda con algo similar... alguien sabe como?
EliminarHola 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
ResponderEliminary 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
EliminarNecesito algun tipo de librerias o package
ResponderEliminarpor que me marca errores en varios import
Gracias por la información que esta muy bueno... me fue de mucha utilidad.
ResponderEliminarQuerí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.
las librerias no sabe cuales son es que me marca error en las librerias
ResponderEliminarMe 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ó.
EliminarEspero que te sirva Saludos!
Este comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarPude 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.
ResponderEliminarHola porfavor puede ayudarme para ver como añado las librerias de apache porfavor
ResponderEliminarSolo 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
EliminarRamiro me sale un error al correr la app se detiene y me sale este aviso:
ResponderEliminarFATAL 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
ActionBar actionBar = getSupportActionBar();
Eliminar// actionBar.setDisplayHomeAsUpEnabled(true);
comente esta linea y ahora si aparecen las empresas q añadí a la base de datos
ActionBar actionBar = getSupportActionBar();
Eliminar// actionBar.setDisplayHomeAsUpEnabled(true);
comente esta linea y ahora si aparecen las empresas q añadí a la base de datos
Ramiro me sale un error al correr la app se detiene y me sale este aviso:
ResponderEliminarFATAL 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
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..!!!
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarpor 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
ResponderEliminarhttps://www.dropbox.com/s/x4xydfy8fgybm2f/get_all_empresas.php?dl=0
Bueno días donde agrego la librería apache para importar. lo de apache un tutorial gracias
ResponderEliminarcomo 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
ResponderEliminarYo lo solucione modificando el Build.gradle agregando
EliminaruseLibrary 'org.apache.http.legacy' ... y
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
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:
ResponderEliminarDeprecated: 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
a mi me ocurre lo mismo, has podido solucionarlo?
Eliminarholaaa tengo problema con esto,alguien que pueda ayudarme
ResponderEliminarimport 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;
Solucion 100% con este video
Eliminarhttps://www.youtube.com/watch?v=SlrnoNY8_vU
Hola! más rápido aún, añade lo siguiente al archivo build.gradle (Module: app) dentro del apartado dependencies
Eliminarcompile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
Muchas Gracias!!! me sirvio un montón. Saludos
EliminarMe 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,
ResponderEliminarHola 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)
ResponderEliminarcon 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 :)
ResponderEliminarjajjaj, muchas gracias.
EliminarRecié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?
ResponderEliminarMuchas gracias y felicitaciones por el material, está excelente y no abunda, así que fue un placer encontrar este lugar.
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!!
ResponderEliminarHola , 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 .
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola que tal buen dia! :)
ResponderEliminaramm! 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
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
ResponderEliminar03-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)
ResponderEliminar03-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
agradeceria me puedas dar una mano con ello.
ResponderEliminarOsvaldo
oapapereira@gmail.com
Ramiro,
ResponderEliminarMuchas 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!!!
No hay tiempo para prepararlos, porque me lleva el doble de tiempo.
EliminarHOla! las siguientes librerias no me las agarra al pegarlas en el JSONParser.java :
ResponderEliminarimport 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!
Te falta poner la libreria
Eliminarhola. consulta. al hacer el get_empresas y probarla en mi buscado me da como resultado lo siguiente:
ResponderEliminarDeprecated: 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?
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
ResponderEliminaruna 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
ResponderEliminarHola, requiero ayuda para obtener el item seleccionado, alguien que pueda colaborarme, es muy urgente.
ResponderEliminarhola buenas tardes se encuentra
ResponderEliminarRamiro.
ResponderEliminarAgradezco 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!!!
Enviame un mensaje a mi correo ronaldorivero3@gmail.com te paso la librería
EliminarHola Ramiro:
ResponderEliminarActualicé 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
Te sale error al compilar o error antes de compilar
EliminarTenía la versión 1.5 y todo funcionaba perfecto. Muy buenos tutoriales.
ResponderEliminarIndagando por la web se me ha solucionado de momento:
ResponderEliminarEn 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
El error salía antes de compilar
ResponderEliminar