Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/12/2011, 18:32
Avatar de zacktagnan
zacktagnan
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Recoger textos de un DIALOG_TEXT_ENTRY

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.
__________________
Saludos,

zacktagnan.
=================================================