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

Respuesta
 
Herramientas
  #21  
Viejo 17/05/13, 12:08:07
Array

[xs_avatar]
johmq johmq no está en línea
Usuario poco activo
 
Fecha de registro: jun 2011
Mensajes: 33
Tu operador: Movistar

Buenas, estoy desarrollando una aplicacion android donde primeramente se comprueba con un login si el usuario esta registrado en la db, y despues se comprueba las rutinas que tiene asignadas. Inicialmente lo hice con dos proyectos independientes, y funcionan perfectamente, pero al unirlos (priomero el login y despues la consulta), me da una serie de errores de los que desconozco su causa.
El login lo hace correctamente (las 4 primeras lineas del log), pero despues falla en cosultar las rutinas :

05-17 09:37:28.855: E/getpostresponse(1171): result= [{"logstatus":"1"}]
05-17 09:37:29.872: E/loginstatus(1171): logstatus= 1
05-17 09:37:29.872: E/loginstatus(1171): valido
05-17 09:37:29.876: E/onPostExecute=(1171): ok
05-17 09:52:03.297: E/AndroidRuntime(1457): FATAL EXCEPTION: main
05-17 09:52:03.297: E/AndroidRuntime(1457): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.LoadedApk.makeApplication(LoadedApk.ja va:504)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.ActivityThread.handleBindApplication(A ctivityThread.java:4364)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.ActivityThread.access$1300(ActivityThr ead.java:141)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1294)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.os.Handler.dispatchMessage(Handler.java:99 )
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.os.Looper.loop(Looper.java:137)
05-17 09:52:03.297: E/AndroidRuntime(1457): at android.app.ActivityThread.main(ActivityThread.jav a:5041)
05-17 09:52:03.297: E/AndroidRuntime(1457): at java.lang.reflect.Method.invokeNative(Native Method)
05-17 09:52:03.297: E/AndroidRuntime(1457): at java.lang.reflect.Method.invoke(Method.java:511)
05-17 09:52:03.297: E/AndroidRuntime(1457): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:793)
05-17 09:52:03.297: E/AndroidRuntime(1457): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:560)

Alguien sabe a que puede ser debido? que hago mal? os pongo el codigo

package test.Droidlogin;

import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import test.Droidlogin.library.Httppostaux;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

HiScreen y login estan en el paquete testdroidlogin
Httppostaux esta en un paquete aparte. ( es la clase que utilizo para hacer las consultas)

public class Login extends Activity {


EditText user;
EditText pass;
Button blogin;
TextView registrar;
Httppostaux post;
// String URL_connect="http://www.scandroidtest.site90.com/acces.php";
String IP_Server="10.0.2.2";//IP DE NUESTRO PC 192.168.1.10
String URL_connect="http://"+IP_Server+"/droidlogin2/acces.php";//ruta en donde estan nuestros archivos

boolean result_back;
private ProgressDialog pDialog;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
post=new Httppostaux();

user= (EditText) findViewById(R.id.edusuario);
pass= (EditText) findViewById(R.id.edpassword);
blogin= (Button) findViewById(R.id.Blogin);
// registrar=(TextView) findViewById(R.id.link_to_register);

//Login button action
blogin.setOnClickListener(new View.OnClickListener(){

public void onClick(View view){

//Extreamos datos de los EditText
String usuario=user.getText().toString();
String passw=pass.getText().toString();

//verificamos si estan en blanco
if( checklogindata( usuario , passw )==true){

//si pasamos esa validacion ejecutamos el asynctask pasando el usuario y clave como parametros

new asynclogin().execute(usuario,passw);


}else{
//si detecto un error en la primera validacion vibrar y mostrar un Toast con un mensaje de error.
err_login();
}

}
});

// registrar.setOnClickListener(new View.OnClickListener(){
//
// public void onClick(View view){
//
// //Abre el navegador al formulario adduser.html
// String url = "http://"+IP_Server+"/droidlogin/adduser.html";
// Intent i = new Intent(Intent.ACTION_VIEW);
// i.setData(Uri.parse(url));
// startActivity(i);
// }
// });

}

//vibra y muestra un Toast
public void err_login(){
Vibrator vibrator =(Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(200);
Toast toast1 = Toast.makeText(getApplicationContext(),"Error:Nomb re de usuario o password incorrectos", Toast.LENGTH_SHORT);
toast1.show();
}


/*Valida el estado del logueo solamente necesita como parametros el usuario y passw*
public boolean loginstatus(String username ,String password ) {
int logstatus=-1;

/*Creamos un ArrayList del tipo nombre valor para agregar los datos recibidos por los parametros anteriores
* y enviarlo mediante POST a nuestro sistema para relizar la validacion*/
ArrayList<NameValuePair> postparameters2send= new ArrayList<NameValuePair>();

postparameters2send.add(new BasicNameValuePair("usuario",username));//usuario
postparameters2send.add(new BasicNameValuePair("password",password));//password

//realizamos una peticion y como respuesta obtenes un array JSON
JSONArray jdata=post.getserverdata(postparameters2send, URL_connect);

/*como estamos trabajando de manera local el ida y vuelta sera casi inmediato
* para darle un poco realismo decimos que el proceso se pare por unos segundos para poder
* observar el progressdialog
* la podemos eliminar si queremos
*
SystemClock.sleep(950);

//si lo que obtuvimos no es null
if (jdata!=null && jdata.length() > 0){

JSONObject json_data; //creamos un objeto JSON
try {
json_data = jdata.getJSONObject(0); //leemos el primer segmento, en nuestro caso el unico
logstatus=json_data.getInt("logstatus");//accedemos al valor
Log.e("loginstatus","logstatus= "+logstatus);//muestro por log que obtuvimos
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//validamos el valor obtenido
if (logstatus==0){// [{"logstatus":"0"}]
Log.e("loginstatus ", "invalido");
return false;
}
else{// [{"logstatus":"1"}]
Log.e("loginstatus ", "valido");
return true;
}

}else{ //json obtenido invalido verificar parte WEB.
Log.e("JSON ", "ERROR");
return false;
}

}


//validamos si no hay ningun campo en blanco
public boolean checklogindata(String username ,String password ){

if (username.equals("") || password.equals("")){
Log.e("Login ui", "checklogindata user or pass error");
return false;

}else{

return true;
}

}

/* CLASE ASYNCTASK
*
* usaremos esta para poder mostrar el dialogo de progreso mientras enviamos y obtenemos los datos
* podria hacerse lo mismo sin usar esto pero si el tiempo de respuesta es demasiado lo que podria ocurrir
* si la conexion es lenta o el servidor tarda en responder la aplicacion sera inestable.
* ademas observariamos el mensaje de que la app no responde.
*

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

String user,pass;
protected void onPreExecute() {
//para el progress dialog
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Autenticando....");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}

protected String doInBackground(String[]params) {
//obtnemos usr y pass
user=params[0];
pass=params[1];

//enviamos y recibimos y analizamos los datos en segundo plano.
if (loginstatus(user,pass)==true){
return "ok"; //login valido
}else{
return "err"; //login invalido
}

}

/*Una vez terminado doInBackground segun lo que halla ocurrido
pasamos a la sig. activity
o mostramos error*
protected void onPostExecute(String result) {

pDialog.dismiss();//ocultamos progess dialog.
Log.e("onPostExecute=",""+result);

if (result.equals("ok")){

Intent i=new Intent(Login.this, HiScreen.class);
i.putExtra("user",user);
startActivity(i);

}else{
err_login();
}

}

}

}



public class HiScreen extends Activity {
String user;
TextView txt_usr;
Button atras;
String IP_Server="10.0.2.2";//IP DE NUESTRO PC 192.168.1.10
String URL_connect="http://"+IP_Server+"/consultarutinasusuario/prueba.php";
private ProgressDialog pDialog;
Httppostaux post;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.lay_screen);

txt_usr= (TextView) findViewById(R.id.usr_name);
atras= (Button) findViewById(R.id.atras);

Bundle extras = getIntent().getExtras();
//Obtenemos datos enviados en el intent.
if (extras != null) {
user = extras.getString("user");//usuario
}else{
user="error";
}

txt_usr.setText(user);//cambiamos texto al nombre del usuario logueado

atras.setOnClickListener(new View.OnClickListener(){

public void onClick(View view){

new asyncRutina().execute("2");
}
});
}

public void comprueba(String id_usuario) {

int id__usuario;
int id_rutina;
int [] rutinas;
/*Creamos un ArrayList del tipo nombre valor para agregar los datos recibidos por los parametros anteriores
* y enviarlo mediante POST a nuestro sistema para relizar la validacion*/
ArrayList<NameValuePair> postparameters2send= new ArrayList<NameValuePair>();
postparameters2send.add(new BasicNameValuePair("id_usuario",id_usuario));//usuario
//realizamos una peticion y como respuesta obtenes un array JSON
JSONArray jdata=post.getserverdata(postparameters2send, URL_connect);
Log.e("El resultado devuelto en login->","JSONArray ="+jdata);

rutinas = new int[jdata.length()];

if (jdata!=null && jdata.length() > 0 ){

Log.e("despues del if","hasta aqui llega");
JSONObject json_data; //creamos un objeto JSON
Log.e("despues crear el objeto JSON","hasta aqui llega");
try {
Log.e("Entramos en el try","hasta aqui llega");
for(int i=0;i<jdata.length();i++){
json_data = jdata.getJSONObject(i);
rutinas[i]=json_data.getInt("Id_Rutina");
Log.e("Id rutina"+(i+1),""+rutinas[i]);
id__usuario=json_data.getInt("Id_Usuario");
//Log.e("Id Usuario",""+id__usuario);

}
} catch (JSONException e) {
e.printStackTrace();
}


}else{ //json obtenido invalido verificar parte WEB.
Log.e("JSON ", "ERROR");

}

}
class asyncRutina extends AsyncTask< String, String, String > {

String user;
protected void onPreExecute() {
//para el progress dialog
pDialog = new ProgressDialog(HiScreen.this);
pDialog.setMessage("Consultando Rutinas...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}

protected String doInBackground(String[]params) {
//obtnemos usr y pass
user=params[0];


comprueba(user);

return user;

//enviamos y recibimos y analizamos los datos en segundo plano.


}

protected void onPostExecute(String user) {

pDialog.dismiss();//ocultamos progess dialog.
Log.e("Mostradas las rutinas del usuario:",""+user);



}

}

}




public class Httppostaux{

InputStream is = null;
String result = "";

public JSONArray getserverdata(ArrayList<NameValuePair> parameters, String urlwebserver ){

//conecta via http y envia un post.
httppostconnect(parameters,urlwebserver);

if (is!=null){//si obtuvo una respuesta

getpostresponse();

return getjsonarray();

}else{

return null;

}

}


//peticion HTTP
private void httppostconnect(ArrayList<NameValuePair> parametros, String urlwebserver){

/
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(urlwebserver);
httppost.setEntity(new UrlEncodedFormEntity(parametros));
//ejecuto peticion enviando datos por POST
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();

}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}

}

public void getpostresponse(){

//Convierte respuesta a String
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();

result=sb.toString();
Log.e("getpostresponse"," result= "+sb.toString());
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
}

public JSONArray getjsonarray(){
//parse json data
try{
JSONArray jArray = new JSONArray(result);

return jArray;
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
return null;
}

}


}


Esas son las tres clases. Alguien puede ayudarme? estoy muy estancado!!!! Gracias!!
Responder Con Cita


  #22  
Viejo 17/05/13, 19:20:30
Array

[xs_avatar]
Celtium Celtium no está en línea
Miembro del foro
 
Fecha de registro: may 2010
Mensajes: 432
Modelo de smartphone: Nexus One, 4

Pasale el depurador, paso a paso... es que sino va ser complicado pillar el error.

Ese error suele darlo cuando se intenta guardar un dato de tistinto tipo en el una variable o se le asigna una acción con un valor null o sin "inflar" la variable. Pon el depurador paso a paso y mira donde rompe. Dimos en que linea rompe y a ver si lo pillamos.
__________________

Responder Con Cita
  #23  
Viejo 19/05/13, 11:15:50
Array

[xs_avatar]
johmq johmq no está en línea
Usuario poco activo
 
Fecha de registro: jun 2011
Mensajes: 33
Tu operador: Movistar

Rompe cuando en la segunda activity, HiScreen va a hacer la segunda consulta. No entiendo el porque, si lo hago por separado en dos proyectos se ejecutan perfectamente, ahora si los pongo juntos, es decir primero el login y despues la consulta de las rutinas me da el fallo en la consulta. Rompe concretamente cuando va a hacer la segunda consulta, ya que la segunda activity se muestra, pero cuando pulso el boton para hacer la consulta falla! y hace la conlta de la misma forma que el login , y me tiene amargadisimo!!!

Gracias!!!!!
Responder Con Cita
  #24  
Viejo 19/05/13, 11:18:35
Array

[xs_avatar]
russellhoff russellhoff no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: ene 2010
Localización: Laudio, Araba
Mensajes: 1,640
Modelo de smartphone: S8, Note 3, HTC One X, Samsung Galaxy S, HTC Magic
Tu operador: Euskaltel Móvil
 Cita: Originalmente Escrito por johmq Ver Mensaje
Rompe cuando en la segunda activity, HiScreen va a hacer la segunda consulta. No entiendo el porque, si lo hago por separado en dos proyectos se ejecutan perfectamente, ahora si los pongo juntos, es decir primero el login y despues la consulta de las rutinas me da el fallo en la consulta. Rompe concretamente cuando va a hacer la segunda consulta, ya que la segunda activity se muestra, pero cuando pulso el boton para hacer la consulta falla! y hace la conlta de la misma forma que el login , y me tiene amargadisimo!!!

Gracias!!!!!
No he mirado mucho tu código, pero profesionalmente me parece una chapuza :p. Para empezar, deberías parsear los JSON en una clase diferente. Por otra parte, cada consulta a la base de datos debería de estar dentro de un hilo, esto es, dentro de una AsyncTask (sino va a cascar justo en el instante).

Espero haberte ayudado.
__________________
Responder Con Cita
  #25  
Viejo 19/05/13, 11:21:00
Array

[xs_avatar]
russellhoff russellhoff no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: ene 2010
Localización: Laudio, Araba
Mensajes: 1,640
Modelo de smartphone: S8, Note 3, HTC One X, Samsung Galaxy S, HTC Magic
Tu operador: Euskaltel Móvil
Por cierto, nos estamos yendo un poco offtopic.

La solución a mi hilo es el siguiente: recomiendo crear un WebService para atacar cualquier base de datos, ahí encontré mi solución.

La propuesta particular mía es usar Java con la librería Jersey para servicios web (JAX-SX creo), usando particularidades de google como GSON (gozada).

Un saludo.
__________________
Responder Con Cita
  #26  
Viejo 19/05/13, 12:47:50
Array

[xs_avatar]
johmq johmq no está en línea
Usuario poco activo
 
Fecha de registro: jun 2011
Mensajes: 33
Tu operador: Movistar

 Cita: Originalmente Escrito por russellhoff Ver Mensaje
No he mirado mucho tu código, pero profesionalmente me parece una chapuza :p. Para empezar, deberías parsear los JSON en una clase diferente. Por otra parte, cada consulta a la base de datos debería de estar dentro de un hilo, esto es, dentro de una AsyncTask (sino va a cascar justo en el instante).

Espero haberte ayudado.
Bueno es la primera vez que programo en android... tendre tiempo para mejorar profesionalmente:P. Las consultas a la base de datos estan ya en una asynctask!
(desde asyntask llamo a la funcion loginstatus(en login) y comprueba ( en HiScreen) ahi es donde se realiza la consulta, )

Si sabeis una posible solucion me ayudariais mucho!! Gracias!!
Responder Con Cita
  #27  
Viejo 19/05/13, 12:52:04
Array

[xs_avatar]
russellhoff russellhoff no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: ene 2010
Localización: Laudio, Araba
Mensajes: 1,640
Modelo de smartphone: S8, Note 3, HTC One X, Samsung Galaxy S, HTC Magic
Tu operador: Euskaltel Móvil
uff te ayudaría pero ahora estoy estudiando. Por cierto, yo llevo en Android desde enero, pero es tema de saber programar o no, en el sentido amplio
__________________
Responder Con Cita
  #28  
Viejo 19/05/13, 12:59:31
Array

[xs_avatar]
johmq johmq no está en línea
Usuario poco activo
 
Fecha de registro: jun 2011
Mensajes: 33
Tu operador: Movistar

 Cita: Originalmente Escrito por russellhoff Ver Mensaje
uff te ayudaría pero ahora estoy estudiando. Por cierto, yo llevo en Android desde enero, pero es tema de saber programar o no, en el sentido amplio

Pues cuando puedas te agradeceria que me echaras una mano!!! de momento estoy intentando ver cual es el problema con el debuguer, a ver si consigo dar con el.

Gracias!
Responder Con Cita
  #29  
Viejo 19/05/13, 13:40:42
Array

[xs_avatar]
johmq johmq no está en línea
Usuario poco activo
 
Fecha de registro: jun 2011
Mensajes: 33
Tu operador: Movistar

Nada no hay manera. Si me funcionan las dos partes como proyectos independientes, porque falla cuando las pongo una tras otra? Arggggggggg me tiene un tanto amargado.
Responder Con Cita
  #30  
Viejo 21/05/13, 09:29:24
Array

[xs_avatar]
johmq johmq no está en línea
Usuario poco activo
 
Fecha de registro: jun 2011
Mensajes: 33
Tu operador: Movistar

A mi lo que me gustaria saber es porque la segunda consulta a base de datos mysql de mis proyectos android SIEMPRE dan error. Ahi es donde esta el problema. He probado con asyntask, sin asyntask, y con hlos. Si hago las consultas en dos proyectos independientes lo hace perfectamente, si las pongo una tras otra, no.
Responder Con Cita
  #31  
Viejo 21/05/13, 10:22:07
Array

[xs_avatar]
russellhoff russellhoff no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: ene 2010
Localización: Laudio, Araba
Mensajes: 1,640
Modelo de smartphone: S8, Note 3, HTC One X, Samsung Galaxy S, HTC Magic
Tu operador: Euskaltel Móvil
Lo que sí tienes que hacer es con AsyncTask. AsyncTask es una clase que te crea un hilo independiente para la ejecución de una serie de sentencias. Es recomendable que uses esta clase para hacer uso de hilos, aunque también puedes gestionarlos por tu cuenta.
__________________
Responder Con Cita
  #32  
Viejo 21/05/13, 10:57:13
Array

[xs_avatar]
johmq johmq no está en línea
Usuario poco activo
 
Fecha de registro: jun 2011
Mensajes: 33
Tu operador: Movistar

 Cita: Originalmente Escrito por russellhoff Ver Mensaje
Lo que sí tienes que hacer es con AsyncTask. AsyncTask es una clase que te crea un hilo independiente para la ejecución de una serie de sentencias. Es recomendable que uses esta clase para hacer uso de hilos, aunque también puedes gestionarlos por tu cuenta.

Si te fijas en el codigo, utilizo esa clase para ejecutar las consultas.
Responder Con Cita
  #33  
Viejo 21/05/13, 11:01:15
Array

[xs_avatar]
russellhoff russellhoff no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: ene 2010
Localización: Laudio, Araba
Mensajes: 1,640
Modelo de smartphone: S8, Note 3, HTC One X, Samsung Galaxy S, HTC Magic
Tu operador: Euskaltel Móvil
Ya sé donde tienes el fallo.

No puedes cambiar de Activity cuando estás dentro de un AsyncTask. Tienes que hacerlo fuera, tras terminar la ejecución dle hilo y, por supuesto, tras el execute().

Me imagino que será por eso eh.
__________________
Responder Con Cita
  #34  
Viejo 21/05/13, 11:02:39
Array

[xs_avatar]
russellhoff russellhoff no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: ene 2010
Localización: Laudio, Araba
Mensajes: 1,640
Modelo de smartphone: S8, Note 3, HTC One X, Samsung Galaxy S, HTC Magic
Tu operador: Euskaltel Móvil
De hecho, cuando abres un nuevo hilo se hace algo así como un cambio de contexto, por lo que en el hilo no se sabe de la existencia de algo de donde ha sido llamado/ejecutado, y por lo tanto, no sabe que estabas en una Activity antes de ejecutarlo.
__________________
Responder Con Cita
  #35  
Viejo 21/05/13, 11:46:53
Array

[xs_avatar]
johmq johmq no está en línea
Usuario poco activo
 
Fecha de registro: jun 2011
Mensajes: 33
Tu operador: Movistar

 Cita: Originalmente Escrito por russellhoff Ver Mensaje
Ya sé donde tienes el fallo.

No puedes cambiar de Activity cuando estás dentro de un AsyncTask. Tienes que hacerlo fuera, tras terminar la ejecución dle hilo y, por supuesto, tras el execute().

Me imagino que será por eso eh.

No es por eso, ademas, en el postexecute ya estas en el hilo principal, unicamente pasas al secundario en el doinbackground.

Ya se cual era el fallo, no podia ejecutar dos peticiones con las mismas variables de httpclient , httppost y todas las que estan dentro de la clase httppostaux, ahi era donde se producia el fallo y por lo tanto nunca me dejaba ejecutar la segunda consulta. He creado otra clase con la misma configuracion que esta y cambiandole los nombre a las variables y ya me funciona

Muchas gracias por la ayuda!!!
Responder Con Cita
  #36  
Viejo 26/02/15, 23:47:26
Array

[xs_avatar]
scalleti scalleti no está en línea
Usuario novato en la web
 
Fecha de registro: feb 2015
Mensajes: 1
Modelo de smartphone: alcalel one touch
Tu operador: Movistar
Ayuda

Podrías mostrarme el código para solucionar este problema, yo tengo el mismo y no paso de ahi
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 15:56:22 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /