Hola:
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 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>
XML principal [main_acceso.xml]
Código:
<?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>
XML ventana de datos de acceso [alert_dialog_text_entry.xml]
Código:
<?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>
Clase Actividad [AccesoActividad.java]
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.