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:

  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!

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.

  • java android nueva cadena
  • Android: android.content.res.Resources $ NotFoundException: Cadena de recursos ID # 0x5
  • ¿Cómo pasar la edición de datos de texto en forma de cadena a la siguiente actividad?
  • Android Studio: error: carácter ilegal: '\ u2028'
  • Conversión de Uri en String
  • La forma más fácil de dar formato a cadena como 1 000 000
  • La división de una cadena funciona en Java, no funciona en Android
  • Convertir cadena a doble en Android
  • XML dentro de un recurso de cadena de Android?
  • Conversión UTF-8 en Android?
  • Cómo cambiar el color del texto en el centro de la frase en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.