2014-01-11 51 views
7

我有一个按钮的活动,当用户点击按钮时,一个AlertDialog与2 EditText出现在哪里你把电子邮件和密码登录。 当我尝试从EditText获取文本时,我总是只能得到空字符串。 布局login_alert是AlertDialog的布局。 这里的代码:EditText getText()返回空字符串

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 

编辑: 活动码:

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(); 
     } 
    } 

} 

问题解决了,SOLUTION: 在OnCreate()我膨胀在视图变量alert_dialog布局。我做了这个视图变量全局(在onCreate()之前),然后在onLabLoginButtonClick()我再次膨胀视图,但我使用onCreate()中的全局实例化。希望它清楚。谢谢你们!

+0

可以显示报警代码dialgo如果 – Raghunandan

回答

4

getText刚刚初始化后。直到你有XML文本,你不会得到的文字。在alertdialog按钮的onclick获取文本。

声明

EdiText ed1,ed2; // before onCreate if in activity and onCraeteView in fragment 

可变一个实例

View view = getLayoutInflater().inflate(R.layout.login_alert, null, false); 
ed1= (EditText) view.findViewById(R.id.emailEditText)) 
ed2 = (EditText) view.findViewById(R.id.emailEditText); 

然后在提示对话框按钮单击

String email = ed1.getText().toString(); 
    String password= ed2.getText().toString() 
+0

我这样做,我得到空字符串反正。 我问你,对不起,我应该发布所有代码,我编辑问题。 – Cardella

+0

@Cardella请编辑问题并发布代码。 – Raghunandan

+0

@Cardella我在代码中看不到警告对话框。你只infalte一个观点,没有对话,而不是加入到活动 – Raghunandan

1

你试图让你膨胀的观点后,立即文本。尝试在用户单击完成按钮时执行此操作。

+0

我最初发布的代码是在登录按钮的onClickListener ......也许我应该夸大在OnCreate(视图),并使用查看全局变量? – Cardella

1

的onCreate之前添加:

EditText email; 
EditText pass; 

中添加这是你的onCreate

etEmail (EditText) view.findViewById(R.id.emailEditText); 
etPass (EditText) view.findViewById(R.id.emailEditText); 

那么这个添加当按钮被点击

String email = etEmail.getText().toString(); 
String pass = etEmail.getText().toString(); 
+0

我用完整的代码编辑了这个问题。谢谢 – Cardella

+0

谢谢史蒂文。我把公共无效的OnClick方法中的getText()声明字符串,我不再获得NULL。 – gimmegimme

0

对你的TextView或者添加TextChangedListener每次更改文本框文本时更改字符串的更改。 一个textwatcher也可以

4

当你点击警告对话框中的登录按钮

上述代码你的文字,当你显示警告对话框,它总是返回总是空的字符串,你应该跟着你必须获取文本下面的过程 第一你做有两个编辑文本和一个按钮 用户写入文本自定义警告框布局EDITTEXT进行登录,给密码,然后点击登录按钮 当你调用登录按钮点击监听器,你可以得到的EditText文本easyly

0

you shoul d点击保存或完成按钮时获取文本。 如果您在点击警报对话框按钮时看到此文本,最终可能会多次尝试。

0

只要确保editText.getText。toString()方法是的OnClick()方法中,如:

TextView submit = enquiryFragment.findViewById(R.id.query_submit_button); 
    submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v){ 

      query_type = query_type_editText.getText().toString(); 
      query_text = query_editText.getText().toString(); 
      if (query_text.length()!=0 && query_type.length()!=0) { 
       postQuery(query_type, query_text, store_id); 
       // Log.e("query_type ",query_type); 
      }else{ 
       Toast.makeText(getContext(), "Enter something !", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    });