|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Conexion Android Con Mysql remota
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"; } } } Última edición por arkos24 Día 04/09/13 a las 21:55:19. |
|
#2
|
||||
|
||||
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. |
![]() |
![]() |
||||||
|