PDA

Ver la Versión Completa : [ CONSULTA ] Conexion Android Con Mysql remota


arkos24
04/09/13, 21:52:29
Soy un novato en esto de android, tiene sus compliques; pero aki vamos, el problema es que debo crear una aplicación que se conecte con una base de datos mysql de forma externa (remota). Pues lo he hecho, creé el main activity y las secundarias. Creé una clase de conexion y consulta que sigueindo metodos http hace las consultas y da respuesta a las peticiones via php y una interfaz como json, hasta ahí no hay problema. Ni siquiera cuando me conecto al simulador en el simulador todo va bien, pero he tratado de hacer pruebas en un disposotivo con android y me da problemas de conexion a la Ip, qué estoy haceindo mal.

Les agrdezco señores de corazón

Aqui la clase mainActivity::

package com.utp.doctoroffice;

import org.json.JSONException;
import org.json.JSONObject;

import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;

public class MainActivity extends Activity implements OnClickListener
{

Button loginBtn;
RadioButton ra,rm,rp;
EditText usr,key;
RadioGroup opcion;
final int RB_ADMIN=10;
final int RB_DOCTO=20;
final int RB_PATIN=30;
String titulo,url;
String claf,user;
LoginAuth obj;
int elegido;
Intent novaWind;
JSONObject logger;
LogginUsr usrlog;

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


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}




private void startObjects()
{
//url="http://10.0.2.2/HygiaAdmin/comConBd.php";
url="http://192.254.211.195/~sebascel/evolucionemos.com/carlos/logEnter.php";
loginBtn=(Button)findViewById(R.id.btnLogin);
opcion=(RadioGroup)findViewById(R.id.btnGtipoUsr);
ra=(RadioButton)findViewById(R.id.rbtnAdmin);
rm=(RadioButton)findViewById(R.id.rbtnMedico);
rp=(RadioButton)findViewById(R.id.rbtnPaciente);
//
ra.setId(RB_ADMIN);
rm.setId(RB_DOCTO);
rp.setId(RB_PATIN);
//
rm.setChecked(true);
usr=(EditText)findViewById(R.id.txtUsuario);
key=(EditText)findViewById(R.id.txtClave);
loginBtn=(Button)findViewById(R.id.btnLogin);
usrlog= new LogginUsr();
loginBtn.setOnClickListener(this);
}

@Override
public void onClick(View v)
{
if(v.getId()==(findViewById(R.id.btnLogin)).getId( ))
{
elegido=opcion.getCheckedRadioButtonId();
//
usrlog.setPassuser( key.getText().toString().trim());
usrlog.setUsername(usr.getText().toString().trim() );
setUsertype(); // definimos el tipo del usurio
Log.i("Usuario",usrlog.getUsername());
Log.i("tipo usuario: ",usrlog.getTipo());
obj=new LoginAuth();

switch (elegido) {
case RB_ADMIN:
novaWind = new Intent(this, PortalAdmin.class);
break;
case RB_DOCTO:
novaWind = new Intent(this, PortalMedico.class);
break;

case RB_PATIN:
novaWind = new Intent(this, PortalPaciente.class);
break;

default:
break;
}

if(usr.getText().equals(null) || key.getText().equals(null))
{
this.alertNoUser(v,"Error de ingreso de datos!!"+"\nVerifique las entradas");
usr.requestFocus();

}
else
{
String res=obj.post(url,usrlog);
//
//Codigo del object Json
try {
logger=new JSONObject(res);
usrlog.setState(logger.getString("success"));

} catch (JSONException e) {
// TODO Auto-generated catch block
Log.i("Error de Captura",e.getMessage());
}
//
//
if(usrlog.getState().equals("0"))
{
alertNoUser(v,String.format("El usuario \'%s\' no aparece registrado ",usrlog.getUsername()));
cleanBoxes();
}
if(usrlog.getState().equals("1")){
try {
usrlog.setNombres(logger.getString("nombres"));
usrlog.setTitulo(logger.getString("titulo"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
alertExistUser(v, usrlog.getTitulo(), usrlog.getNombres());
novaWind.putExtra("nombre", usrlog.getNombres());
startActivity(novaWind);
}
}

}
}

private void alertExistUser(View v, String string, String res) {
new AlertDialog.Builder(this)
.setTitle("Bienvenido!")
.setMessage(Utilidades.saludar()+"\n"+string+": "+res)
.setNeutralButton("Ok", null)
.show();


}

private void alertNoUser(View v,String msg){

new AlertDialog.Builder(this)
.setTitle("Error de Autenticación!!")
.setMessage(msg)
.setNeutralButton("Listo", null)
.show();

}

private void cleanBoxes()
{

usr.setText(null);
key.setText(null);
usr.requestFocus();
ra.setChecked(true);

}

private void setUsertype(){

switch(elegido){
case RB_ADMIN:
usrlog.setTipo("admin");
break;
case RB_DOCTO:
usrlog.setTipo("medico");
break;
case RB_PATIN:
usrlog.setTipo("paciente");
break;
default:
usrlog.setTipo("medico");
break;

}

}





}


Aqui la clase de conexion a la base de datos

package com.utp.doctoroffice;

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

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity ;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils;

import android.util.Log;

public class LoginAuth {

public String post(String posturl, LogginUsr loger)
{

try {

HttpClient httpclient = new DefaultHttpClient();
// HttpClient nos permitira la conexion mediante peticiones http

HttpPost httppost = new HttpPost(posturl);

// HttpPost permite enviar una peticion tipo (POST,URL)

// Aqui se anhaden los parámetros que se enviarán a php
// capturados de las cajas de texto

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("usuario",loger.getUsername()));
params.add(new BasicNameValuePair("clave",loger.getPassuser()));
params.add(new BasicNameValuePair("tipo",loger.getTipo()));

// Actualizamos la entidad con los parámetros recibidos
httppost.setEntity(new UrlEncodedFormEntity(params));

// Finalmente se ejecuta enviando la info al servidor
HttpResponse resp = httpclient.execute(httppost);
// en la variable ent se recibe la respuesta del entity
HttpEntity ent = resp.getEntity();

// Convertimos la respuesta a String
String text = EntityUtils.toString(ent);
// retornamos la respuesta
Log.i("En la clase que llama",text);
return text;

}
catch(Exception e) {
Log.i("En la clase que llama",e.getMessage());
return "Fallo al contactar la IP";

}

}




}

kriogeN
04/09/13, 22:07:45
Doy por supuesto que le has dado permisos a la App para conectarse a Internet.

Quitado de esto, y sin mirar mucho el código en detalle, tiene toda la pinta de que estás usando la conexión Http en el hilo principal, y seguro que el móvil donde lo estás probando es una versión superior a Android 3.0. Si es el segundo caso, tienes un NetworkOnMainThreadException, haz uso de la conexión Http en otro hilo, lo mejor es usar un AsyncTask.