进度对话框不必要的显示

Posted

技术标签:

【中文标题】进度对话框不必要的显示【英文标题】:Progress dialog unnecessary showing 【发布时间】:2012-06-28 14:56:05 【问题描述】:

嗨,我做了一个类似的活动

....
<TableRow >
    <TextView
        android:text="@string/userName"
        android:width ="100dp" />

    <EditText
        android:id="@+id/txt_userName"
        android:
        android:hint="@string/userName" />
</TableRow>

<TableRow>
    <TextView
        android:text="@string/password" />

    <EditText
        android:id="@+id/txt_password"
        android:inputType="textPassword"
        android:hint="@string/password" />
</TableRow>
    ....

这是我的课

public class LoginActivity extends Activity 
    private boolean rememberpassword = false;
    ProgressDialog dialog = null;

    public void onCreate(Bundle savedInstanceState) 

        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        Button btn_logIn = (Button)findViewById(R.id.btn_signIn );
        btn_logIn.setOnClickListener(new OnClickListener()             
            @Override
            public void onClick(View view) 
                showProgressDialog();
                getUserCredentials();           
                       
        ); //end of anonymous class
     //end of onCreate

    private void showProgressDialog() 

        dialog = new ProgressDialog(this);
        dialog.setMessage("Please Wait. Your authentication is in progress");
        dialog.setButton("Cancel", new DialogInterface.OnClickListener() 

            @Override
            public void onClick(DialogInterface dialog, int which)                 
                dialog.dismiss();               
            
        ); //end of anonymous class    
     //end of showProgressDialog()

    private void getUserCredentials() 

        EditText txt_userName = (EditText) findViewById(R.id.txt_userName);
        String userName = txt_userName.getText().toString();

        EditText txt_password = (EditText) findViewById(R.id.txt_password);
        String password = txt_password.getText().toString();

        if (userName != null && !userName.trim().equals("") && password != null && !password.trim().equals(""))            
            dialog.show();
            callWebServide(userName, password);         
         else if (userName == null)           
            Toast.makeText(this, "User Name is required", Toast.LENGTH_LONG).show();        
         else if (password == null && password.trim().equals(""))         
            Toast.makeText(this, "Password is required", Toast.LENGTH_LONG).show();         
           
     //end of getUserCredentials()

 //end of class LoginActivity

首先我的两个条件都不起作用

 else if (userName == null) 
    Toast.makeText(this, "User Name is required", Toast.LENGTH_LONG).show();        
 else if (password == null && password.trim().equals("")) 
    Toast.makeText(this, "Password is required", Toast.LENGTH_LONG).show();         

意味着当我的活动启动时,editText 中有一个提示,如果我点击登录按钮,那么它应该显示需要密码或用户名的 toast。但它不是:(。我第二次使用

if (userName != null && !userName.trim().equals("") && password != null && !password.trim().equals(""))        
    dialog.show();
    callWebServide(userName, password);         

仅当用户名和密码不能为空时才应显示意味着对话框,但是一旦我单击登录按钮,对话框就会开始显示,只有提示在 editText 中。我没有在点击时提到dialog.show()。虽然我正在创建一个对话框但没有显示它。

为什么它的行为出乎意料?我做错什么了吗?

谢谢

【问题讨论】:

你有没有在 if 块之前打印出 userName && password 看看? 试试这个检查 else if (userName == null || userName.lenght()==0) Toast.makeText(this, "User Name is required", Toast.LENGTH_LONG).show (); 【参考方案1】:

检查应该是

 else if (userName == null || userName.lenght()==0) 
    Toast.makeText(this, "User Name is required", Toast.LENGTH_LONG).show();        
 else if (password == null || password.trim().equals("")) 
    Toast.makeText(this, "Password is required", Toast.LENGTH_LONG).show();         

为此

不确定这个但测试一次:

if ( (userName != null) && (!(userName.lenght()>0)) && (password != null) && (!(password .lenght()>0)))        
    dialog.show();
    callWebServide(userName, password);         

【讨论】:

嗨,谢谢 :) 是的,它工作了else if (userName == null || userName.trim().equals(""))。但是你能告诉我当我使用&amp;&amp;而不是||时出了什么问题。我还更改了一个代码,例如if (dialog == null) dialog = new ProgressDialog(this);。因为我认为每当我点击登录按钮时使用以前的代码它正在创建新的对话框实例,这不好。您对此有何看法,对吗? let take (password == null && password.trim().equals("")) 在这个你的密码必须为空空白“”,两者都是移入 if ,但密码不能同时为 null 和 "" .......

以上是关于进度对话框不必要的显示的主要内容,如果未能解决你的问题,请参考以下文章

无法使用异步等待方法显示进度对话框

在 Flutter 的登录屏幕中显示循环进度对话框,如何在 Flutter 中实现进度对话框?

如何:使用 IFileOperation 显示进度对话框

在 AsyncTask 中显示进度对话框

如果异步任务被解除,则重新显示进度对话框

在异步方法中显示进度对话框