EditText getText () devuelve una cadena vacía
Tengo una actividad con un botón, cuando el usuario hace clic en el botón, un AlertDialog aparecen con 2 EditText donde se pone el correo electrónico y la contraseña para iniciar sesión. Cuando intento conseguir el texto del EditText consigo siempre solamente cadenas vacías. El layout login_alert es el diseño de AlertDialog. Aquí el código:
View view = getLayoutInflater().inflate(R.layout.login_alert, null, false); String email = ((EditText) view.findViewById(R.id.emailEditText)).getText().toString(); String password = ((EditText) view.findViewById(R.id.passwordEditText)).getText().toString(); System.out.println("DEBUG: "+email+", "+password); // Empty strings
EDIT: Código de actividad:
- ¿Carga la cadena específica de un recurso?
- Las cadenas no parecen ser iguales en Java en Android, aunque imprimen las mismas
- Cómo editar cadenas multilínea en el archivo strings.xml de Android?
- Los identificadores de recursos de Android repentinamente no son definitivos, los campos no se pueden resolver
- ¿Cómo se agrega un carácter de nueva línea en una cadena en índices específicos?
public class MainActivity extends FragmentActivity { public static final String mAPP_ID = "..."; public static final String USER_DB_URL = "..."; AssetsExtracter mTask; private MainFragment mainFragment; private List<User> usersList = new ArrayList<User>(); private User currentUser = null; private Button labLoginButton; private EditText emailET; private EditText passwordET; private ProgressDialog dialog; private View alertView; /* THIS IS THE SOLUTION */ boolean userIsLogged = false; static { IMetaioSDKAndroid.loadNativeLibs(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setContentView(R.layout.activity_main); /*View view = getLayoutInflater().inflate(R.layout.login_alert, null, false); BEFORE*/ alertView = getLayoutInflater().inflate(R.layout.login_alert, null, false); emailET = (EditText) view.findViewById(R.id.emailEditText); passwordET = (EditText) view.findViewById(R.id.passwordEditText); labLoginButton = (Button) findViewById(R.id.loginLabButton); updateLoginButton(); dialog = new ProgressDialog(this); dialog.setMessage("Signin in..."); if (savedInstanceState == null) { // Add the fragment on initial activity setup mainFragment = new MainFragment(); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, mainFragment).commit(); } else { // Or set the fragment from restored state info mainFragment = (MainFragment) getSupportFragmentManager() .findFragmentById(android.R.id.content); } mTask = new AssetsExtracter(); mTask.execute(0); } /* THIS METHOD IS CALLED BY THE LOGIN BUTTON IN THE MAIN ACTIVITY LAYOUT */ public void onLabLoginButtonClick(View v) { if (userIsLogged) { currentUser = null; userIsLogged = false; updateLoginButton(); Toast.makeText(this, "Disconnected from Lab", Toast.LENGTH_SHORT) .show(); } else { /*View messageView = getLayoutInflater().inflate( R.layout.login_alert, null, false); BEFORE */ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.icon_launcher); builder.setTitle(R.string.login_string); builder.setView(alertView); /* USING THE GLOBAL VARIABLE */ builder.setPositiveButton("Sign me", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface d, int which) { dialog.show(); // Download user and return a List of User DownloadFilesAsyncTask task = new DownloadFilesAsyncTask(USER_DB_URL) { @Override protected void onPostExecute(final List<User> result) { usersList = result; loginCheckRoutine(); //HERE I MANAGE THE LOGIN AND GETTING EMPTY STRING } }; task.execute(); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); builder.create(); builder.show(); } } public void updateLoginButton() { if (userIsLogged) { labLoginButton.setText(R.string.logout_string); } else { labLoginButton.setText(R.string.login_string); } } public void loginCheckRoutine() { String email = emailET.getText().toString(); String password = passwordET.getText().toString(); System.out.println("DEBUG: " + email + ", " + password); // EMPTY // controllo nella lista se c'è l'utente coi dati inseriti for (int i = 0; i < usersList.size(); i++) { if (usersList.get(i).getEmail().equals(email) && password.equals("admin")) { currentUser = usersList.get(i); userIsLogged = true; updateLoginButton(); dialog.dismiss(); break; } } if (!userIsLogged) { userIsLogged = false; updateLoginButton(); dialog.dismiss(); Toast.makeText(MainActivity.this, "Login Failed", Toast.LENGTH_SHORT).show(); } } }
PROBLEMA SOLUCIONADO, SOLUCIÓN: En el onCreate () hincho el layout alert_dialog en una variable View. Hice que View variable global (before onCreate ()) y luego en onLabLoginButtonClick () No inflar la vista de nuevo, pero yo uso ese global instanciado en el onCreate (). Espero que sea claro ¡gracias a todos!
- Concatenar dos cadenas
- Cadena multicolor (androide)
- Bucle Android a través de una cadena para colorear palabras específicas
- Elemento aleatorio de la matriz de cadenas
- Cómo obtener el valor de la cadena de prefijo en Android?
- ¿Por qué las cadenas de referencia de un archivo de recursos externos en lugar de codificación en la disposición de Android XML?
- Android - strings.xml vs constantes estáticas
- ¿Por qué falla mi comparación String to String?
Debe obtener el texto cuando haga clic en el botón de inicio de sesión del cuadro de diálogo de alerta
El código arriba mencionado obtendrá texto cuando muestre el diálogo de alerta siempre devuelve siempre cadena vacía debe seguir el siguiente procedimiento primero hacer un diseño de cuadro de alerta personalizado con dos texto de edición y un botón de usuario escribir texto a edittext para iniciar sesión y dar contraseña y A continuación, haga clic en el botón de inicio de sesión cuando llame al botón de inicio de sesión haga clic en el oyente puede obtener texto de edittext fácilmente
Usted getText
justo después de la inicialización. Hasta que tenga texto en xml no obtendrá el texto. En onclick de alertdialog el botón consigue el texto.
Declarar
EdiText ed1,ed2; // before onCreate if in activity and onCraeteView in fragment
Como una variable de instancia
View view = getLayoutInflater().inflate(R.layout.login_alert, null, false); ed1= (EditText) view.findViewById(R.id.emailEditText)) ed2 = (EditText) view.findViewById(R.id.emailEditText);
Luego en el cuadro de diálogo Alerta, haga clic en
String email = ed1.getText().toString(); String password= ed2.getText().toString()
Antes de onCreate agregar:
EditText email; EditText pass;
Añadir esto en su onCreate
etEmail (EditText) view.findViewById(R.id.emailEditText); etPass (EditText) view.findViewById(R.id.emailEditText);
A continuación, agregue esto al hacer clic en su botón
String email = etEmail.getText().toString(); String pass = etEmail.getText().toString();
Está tratando de obtener el texto inmediatamente después de inflar la vista. Intente hacerlo cuando el usuario haga clic en el botón hecho en su lugar.
Alternativamente, agregue un TextChangedListener a textview para cambiar el cambio de la cadena cada vez que cambie textboxtext. Un textwatcher también es posible
Usted debe conseguir el texto cuando usted chasca encendido excepto o el botón hecho. Si recibe este texto en un clic del botón de diálogo de alerta, puede terminar tomando varias veces.
- Puntos finales de la nube de Google App Engine Marcador Pr @ blem -> Generar error del motor de aplicaciones en el proyecto limpio de Android
- Rutina registra sesiones pero no eventos (android)