Home Menu

Menu



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  
Viejo 04/05/15, 12:03:18
Avatar de kohario88
kohario88 kohario88 no está en línea
Miembro del foro
Mensajes: 79
 
Fecha de registro: abr 2015
Mensajes: 79
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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.
Responder Con Cita


  #2  
Viejo 04/05/15, 14:47:37
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Puedes usar SharedPreferences.

http://developer.android.com/trainin...eferences.html
Responder Con Cita
  #3  
Viejo 04/05/15, 15:18:26
Avatar de kohario88
kohario88 kohario88 no está en línea
Miembro del foro
Mensajes: 79
 
Fecha de registro: abr 2015
Mensajes: 79
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
oks, ahora lo intento gracias
Responder Con Cita
  #4  
Viejo 04/05/15, 16:39:40
Avatar de kohario88
kohario88 kohario88 no está en línea
Miembro del foro
Mensajes: 79
 
Fecha de registro: abr 2015
Mensajes: 79
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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 ****************************************/
Responder Con Cita
  #5  
Viejo 06/05/15, 09:16:39
Avatar de rafaxplayer
rafaxplayer rafaxplayer no está en línea
Miembro del foro
Mensajes: 224
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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.
Responder Con Cita
  #6  
Viejo 08/05/15, 10:30:05
Avatar de kohario88
kohario88 kohario88 no está en línea
Miembro del foro
Mensajes: 79
 
Fecha de registro: abr 2015
Mensajes: 79
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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.
Responder Con Cita
Respuesta

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


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 17:00:47 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007