Android EditText getText()返回空字符串
我有一个带有按钮的活动,当用户单击按钮时,会出现一个AlertDialog,其中包含2个EditText,您可以在其中输入电子邮件和登录密码。 当我试图从EditText获取文本时,我总是只得到空字符串。 布局登录\u警报是警报对话框的布局。 代码如下:Android EditText getText()返回空字符串,android,string,android-edittext,Android,String,Android Edittext,我有一个带有按钮的活动,当用户单击按钮时,会出现一个AlertDialog,其中包含2个EditText,您可以在其中输入电子邮件和登录密码。 当我试图从EditText获取文本时,我总是只得到空字符串。 布局登录\u警报是警报对话框的布局。 代码如下: View view = getLayoutInflater().inflate(R.layout.login_alert, null, false); String email = ((EditText) view.findVi
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();
}
}
}
public类MainActivity扩展了FragmentActivity{
公共静态最终字符串mAPP_ID=“…”;
公共静态最终字符串USER_DB_URL=“…”;
资产采集器mTask;
私有主片段主片段;
private List usersList=new ArrayList();
私有用户currentUser=null;
专用按钮标签登录按钮;
私人编辑文本电子邮件;
专用文本密码;
私人对话;
private View alertView;/*这是解决方案*/
布尔userIsLogged=false;
静止的{
imetaiosdkardroid.loadNativeLibs();
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Picture);
setContentView(R.layout.activity_main);
/*View=GetLayoutFlater()。充气(R.layout.login\u警报,null,false);在*/
alertView=GetLayoutFlater().充气(R.layout.login\u alert,null,false);
emailET=(EditText)view.findViewById(R.id.emailEditText);
passwordET=(EditText)view.findViewById(R.id.passwordEditText);
labLoginButton=(按钮)findViewById(R.id.loginlabutton);
updateLoginButton();
dialog=新建ProgressDialog(此);
设置消息(“登录…”);
如果(savedInstanceState==null){
//在初始活动设置中添加片段
mainFragment=新的mainFragment();
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content,mainFragment).commit();
}否则{
//或者根据还原的状态信息设置片段
mainFragment=(mainFragment)getSupportFragmentManager()
.findFragmentById(android.R.id.content);
}
mTask=新资产提取程序();
mTask.execute(0);
}
/*此方法由主活动布局中的登录按钮调用*/
公共无效仅可登录按钮单击(视图v){
if(userisloged){
currentUser=null;
userIsLogged=false;
updateLoginButton();
Toast.makeText(此为“与实验室断开连接”,Toast.LENGTH\u SHORT)
.show();
}否则{
/*查看消息查看=GetLayoutFlater()。充气(
R.layout.login\u警报,null,false);在*/
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setIcon(R.drawable.icon_启动器);
builder.setTitle(R.string.login\u字符串);
builder.setView(alertView);/*使用全局变量*/
setPositiveButton(“给我签名”,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(对话框接口d,int which){
dialog.show();
//下载用户并返回用户列表
DownloadFilesAsyncTask任务=新的DownloadFilesAsyncTask(用户\u DB\u URL){
@凌驾
受保护的void onPostExecute(最终列表结果){
usersList=结果;
loginCheckRoutine();//这里我管理登录并获取空字符串
}
};
task.execute();
}
});
setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
//TODO自动生成的方法存根
}
});
builder.create();
builder.show();
}
}
public void updateLoginButton(){
if(userisloged){
labLoginButton.setText(R.string.logout_string);
}否则{
labLoginButton.setText(R.string.login_string);
}
}
公共无效登录检查例程(){
字符串email=emailET.getText().toString();
字符串密码=passwordET.getText().toString();
System.out.println(“调试:“+电子邮件+”,“+密码);//空
//控制者内拉·利斯塔(nella lista se cèl'utente coi dati inseriti)
对于(int i=0;i
问题已解决,解决方案:
在onCreate()中,我在视图变量中展开alert_对话框布局。我将视图变量设置为全局变量(在onCreate()之前),然后在onLabLoginButtonClick()中我不再膨胀视图,而是使用onCreate()中实例化的全局变量。希望它是清楚的。谢谢大家! 您可以在初始化之后
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()
您正在尝试在视图膨胀后立即获取文本。尝试在用户单击“完成”按钮时执行此操作
EditText email;
EditText pass;
etEmail (EditText) view.findViewById(R.id.emailEditText);
etPass (EditText) view.findViewById(R.id.emailEditText);
String email = etEmail.getText().toString();
String pass = etEmail.getText().toString();
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();
}
}
});