|
||
|
|
|
|||||||
| 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
|
||||
|
||||
|
Login en android studio
Buenos días.
Estoy practicando la creación de Log in en android studio. Mi aplicacion tendría un modo visitante, por así decirlo, y un modo usuario, es decir, si te logeas ves mas opciones. Mi aplicación consta de un activity principal que es un menú con varias opciones y es donde quiero que me detecte si soy usuario o no para mostrar mas opciones. (Siento si soy muy pesado y me excedo en la explicación pero si os transmito al detalle lo que quiero exactamente y mi problema creo que os sera mas fácil ayudarme. He creado la pestaña login y esta me funciona perfectamente: 1º entro en el main (donde las opciones) 2º selecciono el botón login que me lleva a activity login 3º introduzco datos y doy a iniciar sesión 3.1 Si es erróneo me aparece una activity diciéndome error y me redirecciona al login 3.2 Si es correcto me aparece una activity diciéndome correcto y me crea el activity main pasándome el booleano conectado a true. 4º En el login no se me muestra el botón login sino el botón desconectarse y me aparecen las opcones que quiero mostrar como conectado(por lo que se que conectado = true) Mi problema viene ahora. Si yo entro en una pestaña de mi menú o de las opciones del main que me redireccionen a otro activity o fragment, al regresar al main conectado =false. No se como guardar de tal manera el resultado de esa variable para que solo sea posible cambiarla desde "cerrar sesión". Cualquier pregunta o duda de mi problema o mi programa me dicen y les contesto. Muchas gracias de antemano. |
|
|
|
#3
|
||||
|
||||
|
oks, ahora lo intento
gracias
|
|
#4
|
||||
|
||||
|
No consigo que funcione
Paso por aquí mi main class y si podéis y no os importa le echáis un vistazo porque sigue sin funcionar (y si, se que es mucho y a saco pero no se me ocurre que mas hacer):
package com.example.kohario.newofersalud; import android.app.DownloadManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.FragmentTransaction; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarDrawerToggle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import android.content.Context; import android.content.SharedPreferences; import java.lang.*; import java.util.List; public class OferSaludMain extends ActionBarActivity { // Control de la pila (historial) private boolean comienzo = true; private int pila = 0; private int posActual = 0; static boolean conectado; // Navigation drawer (men�) y lista para cargar en el mismo. private DrawerLayout menuDrawer; private ListView listaDrawer; // Extras para el navigation drawer. private ActionBarDrawerToggle drawerToggle; // Adaptador de la lista. /** Metodo inicializador de casi todo lo necesario para la actividad. ** @override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_activity_main); if (savedInstanceState != null) { this.pila = savedInstanceState.getInt("pila"); this.posActual = savedInstanceState.getInt("posActual"); this.comienzo = savedInstanceState.getBoolean("comienzo"); if(conectado==true){ this.conectado=savedInstanceState.getBoolean("cone xion"); } } // tituloAction = tituloDrawer = getTitle(); menuDrawer = (DrawerLayout) findViewById(R.id.drawerLayout); listaDrawer = (ListView) findViewById(R.id.menuIzquierdo); // Pongo a cada elemento de la lista el listener necesario para hacerles // click. listaDrawer.setOnItemClickListener(new DrawerItemClickListener()); // Creo un adaptador de lista y le paso el contexto y mi lista // personalizada. // Llamo al m�todo que me llena la lista. llenarLista(); // Toggle del drawer (abierto/cerrado) drawerToggle = new ActionBarDrawerToggle(this, menuDrawer, R.string.drawer_abierto, R.string.drawer_cerrado ) { // Estado del drawer: cerrado. public void onDrawerClosed(View view) { super.onDrawerClosed(view); // getSupportActionBar().setTitle(tituloAction); } // Estado del drawer: abierto. public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); // getSupportActionBar().setTitle(tituloDrawer); } }; // Pongo el drawerToggle como listener de menuDrawer. menuDrawer.setDrawerListener(drawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(tr ue); if (savedInstanceState == null) { elementoElegido(0); comienzo = false; } else { elementoElegido(posActual); } } @override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("pila", this.pila); outState.putInt("posActual", this.posActual); outState.putBoolean("comienzo", this.comienzo); outState.putBoolean("conexion",this.conectado); } public void openmenu(View v){ menuDrawer.openDrawer(listaDrawer); } /** M�todo que llena la lista de opciones. ** public void llenarLista() { AdaptadorDrawer adaptador = new AdaptadorDrawer(this); // Creo un Array desde XML con los nombres de cada item. String opciones[] = getResources().getStringArray(R.array.opcionesMenu ); // Empiezo a popular los items con sus respectivos nombres. for (int i = 0; i < opciones.length; i++){ adaptador.aditem(opciones[i].toString()); } listaDrawer.setAdapter(adaptador); } /** Evento que ocurre despu�s de que esta actividad sea creada. ** @override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); /* * Sincroniza el estado abierto/cerrado del drawer despu�s de que * onRestoreInstanceState haya tenido lugar. * drawerToggle.syncState(); if(conectado==true){ TextView iniciar; iniciar=(TextView)findViewById(R.id.xlog); TextView desconec; desconec=(TextView)findViewById(R.id.btncerrarsesi on); iniciar.setVisibility(View.GONE); desconec.setVisibility(View.VISIBLE); SharedPreferences preferencias=getSharedPreferences("conexion",Conte xt.MODE_PRIVATE); SharedPreferences.Editor editor=preferencias.edit(); editor.putBoolean("conexion",conectado); editor.commit(); } else{ TextView iniciar; iniciar=(TextView)findViewById(R.id.xlog); TextView desconec; desconec=(TextView)findViewById(R.id.btncerrarsesi on); iniciar.setVisibility(View.VISIBLE); desconec.setVisibility(View.GONE); SharedPreferences preferencias=getSharedPreferences("conexion",Conte xt.MODE_PRIVATE); SharedPreferences.Editor editor=preferencias.edit(); editor.putBoolean("conexion",conectado); editor.commit(); } } /** Evento de cambio de configuraci�n. ** @override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig); } /** Men� de la barra de acci�n. ** @override public boolean onCreateOptionsMenu(Menu menu) { // Carga el men� si existe. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_ofer_salud_main, menu); return true; } /** * Lo que sucede al pulsar los elementos de la barra de acci�n y una parte * del navigation drawer (el abrir/cerrar). ** @override public boolean onOptionsItemSelected(MenuItem item) { // Pasa el evento al drawerToggle de la ActionBar si est� presente, // si devuelve verdadero es que se ha tocado el bot�n del // navigationDrawer. if (drawerToggle.onOptionsItemSelected(item)) { return true; } // Otros objetos de la barra de acci�n... return super.onOptionsItemSelected(item); } // Clase interna escuchadora. private class DrawerItemClickListener implements ListView.OnItemClickListener { @override public void onItemClick(AdapterView padre, View vista, int posicion, long id) { if (pila != posicion) { if (posicion != 5 && posicion != 8 && posicion != 12 && posicion != 13 && posicion != 14 && posicion != 15) { elementoElegido(posicion);// Llamada al m�todo que lanza las // otras actividades de la app. } else { menuDrawer.closeDrawer(listaDrawer);// Cierra el men� // drawer. switch (posicion) { case 5: abrirPuntosDeVenta(); //Toast.makeText(getApplication().getApplicationCont ext(), "Puntos de venta", Toast.LENGTH_SHORT).show(); break; case 8: abrirBlog(); break; case 12: abrirLlamada(); break; case 13: abrirWeb(); break; case 14: abrirEmail(); break; case 15: abrirFormulariol(); break; } } } else menuDrawer.closeDrawer(listaDrawer);// Cierra el drawer. } } /** M�todo que cambia los fragmentos de contenido de la actividad. ** private void elementoElegido(int posicion) { /* * Creo un nuevo fragmento y especifico que numero de elemento menu se * va a mostrar en la pantalla. * // Asigno la variable para saber que fragmento esta en lo mas alto de la // backstack. pila = posicion; posActual = posicion;// Guardo la posicion para recuperla en un cambio // de orientacion. // Extraigo un array de XML para cambiar el titulo en funcion de la // seccion. String titulos[] = getResources().getStringArray(R.array.titulosMenu) ; if ((posicion != 8 && posicion != 12 && posicion != 13 && posicion != 14 && posicion != 15)) this.setTitle(titulos[posicion]); // Cro un fragmento y establezco sus propiedades. FragmentoContenido fragmento = new FragmentoContenido(); Bundle args = new Bundle(); args.putInt(FragmentoContenido.ARG_NUMERO_ELEMENTO , posicion); fragmento.setArguments(args); // Inserta el fragmneto reemplazando uno ya existente FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); // Pongo aniamciones personalizadas seg�n mis necesidades. if (!comienzo) ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left); else ft.setCustomAnimations(R.anim.abc_slide_in_top, R.anim.slide_out_left); // ft.setTransition(ft.TRANSIT_FRAGMENT_FADE);<-Animaci�n por defecto, // m�s ligera. ft.replace(R.id.contenedor, fragmento); ft.commit(); // Reslta el objeto seleccionado, actualiza el t�tulo, y cierra el // drawer. listaDrawer.setItemChecked(posicion, true); // setTitle("T�tulo X");<-Cambio de t�tulo despreciadao, de momento. menuDrawer.closeDrawer(listaDrawer); } /********************* METODO DE NAVEGACION ********************************* @override public void onBackPressed() { /* * Si el usuario no est� en la pantalla de inicio, le envia a ella. Si * no, se entiende que la navegaci�n ha alcanzado su �ltimo punto y la * app se cierra. * if (pila != 0) { elementoElegido(0); String titulos[] = getResources().getStringArray( R.array.titulosMenu); this.setTitle(titulos[0]); } else finish(); } /********************* M�TODOS PRIMERA PLANA ****************************** public void filtrarCentros(View vista) { Intent i = new Intent(getApplicationContext(), FiltroCentros.class); startActivity(i); } public void filtrarEspecialistas(View vista) { Intent i = new Intent(getApplicationContext(), FiltroEspecialistas.class); startActivity(i); } /********************* M�TODOS PRIMERA PLANA ****************************** /********************* M�TODOS CONTACTO ****************************** public void login(View view) { Intent i = new Intent(this, layout_login.class ); startActivity(i); } public void abrirPuntosDeVenta(){ Intent i = new Intent(this, MapaOfs.class); i.putExtra("origen", "puntosDeVenta"); startActivity(i); } public void abrirBlog() { String url; Intent i; // Al uri se le pasa la direcci�n url del blog. url = "http://www.ofersalud.es/blog/"; i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(Intent.createChooser(i, "Abrir página web con:")); } public void abrirLlamada() { Intent i; // Al uri se le pasa el tel�fono de Ofersalud. i = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:963286428")); startActivity(i); } public void abrirWeb() { String url; Intent i; // Al uri se le pasa la direcci�n de la web de Ofersalud. url = "http://www.ofersalud.es/"; i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(Intent.createChooser(i, "Abrir página web con:")); } public void abrirEmail() { final Intent intentEmail = new Intent( android.content.Intent.ACTION_SEND); // Tipo de texto. intentEmail.setType("plain/text"); // Destinatario. intentEmail.putExtra(android.content.Intent.EXTRA_ EMAIL, new String[] { "[email protected]" }); // Se le muestra al usuario una lista con sus apps capaces de // enviar un correo. startActivity(Intent.createChooser(intentEmail, "Enviar e-mail con:")); } public void abrirFormulariol() { Intent i = new Intent(this, VistaForm.class); startActivity(i); } /******************************* FIN **************************************** /********************* M�TODOS REDES SOCIALES ****************************** public void irFacebook(View v) { // v.setBackgroundResource(R.drawable.forma_redondead a); startActivity(abrirFacebookApp(this)); } public static Intent abrirFacebookApp(Context context) { /* * Este m�todo comprueba si la APP de facebook est� instalada en el * dispositivio. si lo est�, entonces abre la p�gina de Ofersalud en la * APP de Facebook, si no, la abre con uno de los navegadores elegido * por el usuaruio. * try { context.getPackageManager() .getPackageInfo("com.facebook.katana", 0); return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/170200423092462")); } catch (Exception e) { return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/170200423092462")); } } /****************************** FIN **************************** /************************* M�TODOS DESCARGAS ****************************** /** * El contexto se le pasa para averiguar la versi�n del tel�fono y la info * de download manager. true si la descarga est� disponible. * public static boolean descargaDisponible(Context context) { try { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { return false; } Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setClassName("com.android.providers.downloa ds.ui", "com.android.providers.downloads.ui.DownloadList") ; List<ResolveInfo> list = context.getPackageManager() .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } catch (Exception e) { return false; } } public void descargar(View v) { if (descargaDisponible(getApplicationContext())) { String url = ""; Toast.makeText(this, "Su descarga comenzará en breve.", Toast.LENGTH_SHORT).show(); switch (v.getId()) { case R.id.dd_valencia: url = "https://ofersalud.es/pdf/valencia.php"; break; case R.id.dd_alicante: url = "https://ofersalud.es/pdf/alicante.php"; break; case R.id.dd_baleares: url = "https://ofersalud.es/pdf/baleares.php"; break; case R.id.dd_madrid: url = "https://ofersalud.es/pdf/madrid.php"; break; case R.id.dd_murcia: url = "https://ofersalud.es/pdf/murcia.php"; break; case R.id.dd_castellon: url = "https://ofersalud.es/pdf/castellon.php.pdf"; break; case R.id.dd_cantabria: url = "https://ofersalud.es/pdf/cantabria.php.pdf"; break; } DownloadManager.Request request = new DownloadManager.Request( Uri.parse(url)); request.setDescription("Libro del cuadro médico de Ofersalud"); request.setTitle("Libro cuadro médico"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager. Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } request.setDestinationInExternalPublicDir( Environment.DIRECTORY_DOWNLOADS, v.getTag().toString() + "_cuadro_médico.pdf"); // Obtener servicio de descarga y poner archivo a la cola. DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); manager.enqueue(request); } } static void conectando(boolean c){ conectado=c; } public void desconectar(View v){ conectado=false; SharedPreferences preferencias=getSharedPreferences("datos",Context. MODE_PRIVATE); SharedPreferences.Editor editor=preferencias.edit(); editor.putBoolean("conexion",conectado); editor.commit(); finish(); } //metodo que abre el boton tarifas si has iniciado sesion y que te redirecciona si no public void mostrartarifas(View view) { if(conectado==false){ noeresusuario(view); } else{ eresusuario(view); } } public void eresusuario(View view) { Intent i = new Intent(this, youarenotuser.class ); startActivity(i); } public void noeresusuario(View view) { Intent i = new Intent(this, youarenotuser.class ); startActivity(i); } } /******************************* FIN ****************************************/ |
|
#5
|
||||
|
||||
|
Revisar toda esa clase es un poco tedioso y aun mas cuando la escribe otro , tendrías que mirar que errores te da el logcat o mostrarlo aqui y ir arreglado el código.
|
|
#6
|
||||
|
||||
|
Gracias. Te he hecho caso y he revisado todo encontrandome con algo extraño. Estoy pasando entre activitys un boolean conectado y con saveinstance se guarda y toso. Según ese booleano, un boton log in se hace visible y otro boton, cerrar sesion, invisible o viceversa. es curioso que el booleano se me guarda y la primera vez si que se me cambia la visibilidad de los botones pero cuando doy a otro menu y vuelvo, el boton login es visible y el otro invisible. Es raro porque a pesar de ello tengo marcadores que me demustran que la variable booleana conectado esta en true.(es decir, deberia cambiarme la visibilidad.
|
![]() |
Estás aquí
|
||||||
|
||||||