El juego que estoy programando empieza con una primera pantalla de portada con una imagen introductoria y un botón de Acceso.
Al pulsar en el botón, se muestra una ventana de diálogo para insertar un nombre de usuario y su contraseña. Todo para iniciar sesión y así entrar en el juego y poder jugar una partida.
La ventana de diálogo es de tipo de entrada de datos (DIALOG_TEXT_ENTRY), pero no llego a capturar el texto de las cajas pues al pulsar en el botón de OK, me sale el mensaje de [Forzar cierre]. Lo programado en el click de Cancelar si va bien.
Pero lo que me importa es como hacer para recoger los datos insertados en las dos cajas de texto.
A continuación, pongo los códigos de los archivos empleados.
Estilos [styles.xml]
Código:
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- ====== ESTILOS ACCESO :: INI =========================== --> <style name="sty_LayoutAcceso"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">fill_parent</item> <item name="android:orientation">vertical</item> <item name="android:gravity">center</item> <item name="android:background">#ff0099ff</item> </style> <style name="sty_ElmntosAcceso"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> </style> <!-- ====== ESTILOS ACCESO :: FIN =========================== --> </resources>
Textos [strings.xml]
Código:
XML principal [main_acceso.xml]<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">_VocaRuletario</string> <string name="str_btnAcceso">Acceso</string> <string name="str_etiqNivel">NIVEL:</string> <string name="str_etiqPtos">PUNTOS:</string> <string name="str_etiqPista">PISTA:</string> <string name="str_btnRuleta">Ruleta</string> <string name="str_btnJugar">Jugar</string> <string name="str_btnContinuar">Has Acertado!! Continuar?</string> <string name="str_btnProponer">Proponer</string> <string name="str_btnSolucion">Solución</string> <!-- ============================== --> <!-- Ventana Dialog Textos --> <!-- ============================== --> <string name="alert_dialog_text_entry">Inicia Sesión</string> <string name="alert_dialog_username">Usuario:</string> <string name="alert_dialog_password">Contraseña:</string> <string name="alert_dialog_ok">O.K.</string> <string name="alert_dialog_cancel">Cancelar</string> </resources>
Código:
XML ventana de datos de acceso [alert_dialog_text_entry.xml]<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/sty_LayoutAcceso"> <ImageView android:id="@+id/imgPortada" style="@style/sty_ElmntosAcceso" android:src="@drawable/ic_portada" /> <Button android:id="@+id/btnAcceso" style="@style/sty_ElmntosAcceso" android:text="@string/str_btnAcceso" /> </LinearLayout>
Código:
Clase Actividad [AccesoActividad.java]<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/username_view" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/alert_dialog_username" android:gravity="left" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/nomUsuario" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:capitalize="none" android:gravity="fill_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/passUsuario" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/alert_dialog_password" android:gravity="left" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/password_edit" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:capitalize="none" android:gravity="fill_horizontal" android:password="true" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>
Código:
package com.android; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class AccesoActividad extends Activity implements OnClickListener { // Atributos a asignar a un control del Interfaz private Button elBtnAcceso; private static final int DIALOG_TEXT_ENTRY = 7; private EditText laCajaNomUsu, laCajaPassUsu; private String nomUsuAcceso, passUsuAcceso; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_acceso); // Asignando Atributos a su correspondiente Control del Interfaz asignacionControles(); } // onCreate() private void asignacionControles() { // Asignando Atributos a su correspondiente Control del Interfaz elBtnAcceso = (Button)findViewById(R.id.btnAcceso); elBtnAcceso.setOnClickListener(this); elBtnAcceso.requestFocus(); } protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_TEXT_ENTRY: // This example shows how to add a custom layout to an AlertDialog LayoutInflater factory = LayoutInflater.from(this); final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null); return new AlertDialog.Builder(AccesoActividad.this) .setIcon(R.drawable.alert_dialog_icon) .setTitle(R.string.alert_dialog_text_entry) .setView(textEntryView) .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { laCajaNomUsu = (EditText)textEntryView.findViewById(R.id.nomUsuario); laCajaPassUsu = (EditText)textEntryView.findViewById(R.id.passUsuario); // Usuario ha pulsado OK try { nomUsuAcceso = laCajaNomUsu.getText().toString(); passUsuAcceso = laCajaPassUsu.getText().toString(); // Prueba de que llegan y se recogen los datos mostrarMensaje("\nUsuario dado: [" + nomUsuAcceso + "]\nContraseña dada: [" + passUsuAcceso + "]"); } catch (Exception e) { // TODO: handle exception String mensaje = e.getMessage(); mostrarMensaje("ERROR: " + mensaje); } } }) .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Usuario ha pulsado Cancelar String txtCancelar = "Si no se inicia sesión, no se puede acceder al juego"; mostrarMensaje(txtCancelar); } }) .create(); } return null; } public void mostrarMensaje(String mensaje) { Toast.makeText(this, mensaje, Toast.LENGTH_LONG).show(); } public void onClick(View boton) { switch (boton.getId()) { case R.id.btnAcceso: //ShowIniciarSesion(); showDialog(DIALOG_TEXT_ENTRY); /* // Validar Acceso Acceso elAcceso = new Acceso(); boolean accesoOK = elAcceso.verificarAcceso(nomUsuAcceso, passUsuAcceso); String mensAcceso = ""; if (accesoOK) { mensAcceso += "Usuario: " + nomUsuAcceso; mensAcceso += "\nContraseña: " + passUsuAcceso; mostrarMensaje(mensAcceso); Intent i = new Intent(this, DroidVocabularioActivity.class); startActivity(i); } else { mensAcceso = "Los datos de Acceso no son correctos"; mostrarMensaje(mensAcceso); }*/ } } }
Espero que alguien responda y me pueda ayudar. He buscado por internet pero todo lo que pruebo, me sigue fallando. Y a veces, lo que encuentro es lo mismo que lo que yo he puesto. Pero a mi me falla.