错误的登录凭据停止进度对话框

时间:2018-04-17 08:37:52

标签: android login authorization progressdialog

我遇到停止进度对话框的问题。 BackgroundWorkerActivity用于用户授权和注册。当用户填写登录布局上的用户名和密码字段,并单击登录按钮时,系统启动授权并且进度对话框开始循环,并在消息框出现进入下一个布局时停止。另一方面,当用户使用错误数据或字段为空时,此进度对话框不会消失。出现消息框,显示"字段为空"或"无效的登录凭据",但进度对话框仍保留在布局上。这是BackgroundWorkerActivity:

public class BackgroundWorker extends AsyncTask<String, Void, String >{
        Context context;
        AlertDialog alertDialog ;
        BackgroundWorker (Context ctx){
            context = ctx;
        }
        ProgressDialog loading;
        @Override
        protected String  doInBackground(String... params) {
            String type = params[0];
            String login_url = "http://sultonkhuja1111.000webhostapp.com/MobApp/auth_login.php";
            String register_url = "http://sultonkhuja1111.000webhostapp.com/MobApp/registration.php";

            if(type.equals("login")){
                try {
                    String user_name = params[1];
                    String password = params[2];
                    URL url = new URL(login_url);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.setRequestMethod("POST");
                    httpURLConnection.setDoOutput(true);
                    httpURLConnection.setDoInput(true);
                    OutputStream outputStream = httpURLConnection.getOutputStream();
                    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                    String post_data = URLEncoder.encode("user_name","UTF-8")+"="+URLEncoder.encode(user_name,"UTF-8")+"&"
                                +URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(password,"UTF-8");
                    bufferedWriter.write(post_data);
                    bufferedWriter.flush();
                    bufferedWriter.close();
                    outputStream.close();
                    InputStream inputStream = httpURLConnection.getInputStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
                    String result="";
                    String  line="";
                    while ((line = bufferedReader.readLine())!= null){
                        result+=line;
                    }
                    bufferedReader.close();
                    inputStream.close();
                    httpURLConnection.disconnect();
                    return result;
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            } else if(type.equals("register")){
                try {
                 //   String spnUsertype = params[1];
                    String txtFirst = params[1];
                    String txtLast = params[2];
                    String txtEmail = params[3];
                    String txtUsername = params[4];
                    String txtPassword = params[5];
                    String txtPhone = params[6];
                    URL url = new URL(register_url);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.setRequestMethod("POST");
                    httpURLConnection.setDoOutput(true);
                    httpURLConnection.setDoInput(true);
                    OutputStream outputStream = httpURLConnection.getOutputStream();
                    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                    String post_data = //URLEncoder.encode("user_type","UTF-8")+"="+URLEncoder.encode(spnUsertype,"UTF-8")+"&"
                    URLEncoder.encode("first","UTF-8")+"="+URLEncoder.encode(txtFirst,"UTF-8")+"&"
                    + URLEncoder.encode("last","UTF-8")+"="+URLEncoder.encode(txtLast,"UTF-8")+"&"
                    + URLEncoder.encode("email","UTF-8")+"="+URLEncoder.encode(txtEmail,"UTF-8")+"&"
                    + URLEncoder.encode("username","UTF-8")+"="+URLEncoder.encode(txtUsername,"UTF-8")+"&"
                    + URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(txtPassword,"UTF-8")+"&"
                            +URLEncoder.encode("phone","UTF-8")+"="+URLEncoder.encode(txtPhone,"UTF-8");
                    bufferedWriter.write(post_data);
                    bufferedWriter.flush();
                    bufferedWriter.close();
                    outputStream.close();
                    InputStream inputStream = httpURLConnection.getInputStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
                    String result="";
                    String  line="";
                    while ((line = bufferedReader.readLine())!= null){
                        result+=line;
                    }
                    bufferedReader.close();
                    inputStream.close();
                    httpURLConnection.disconnect();
                    return result;
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
      return null;
        }

     @Override
        protected void onPreExecute() {
            loading = ProgressDialog.show(context, "Loading Menu", "Please wait...", false, false);
            alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("Login Status");

        }

     @Override
        protected void onPostExecute(String  result) {
           // alertDialog.setMessage(result);
          //  alertDialog.show();

            if (result.contains("Successfully")) {
                loading.dismiss();
                Toast.makeText(context, result, Toast.LENGTH_LONG).show();
                Intent i2 = new Intent(context, Login.class);
                context.startActivity(i2);
            } else if(result.contains("Congratulations")) {
                Toast.makeText(context, result, Toast.LENGTH_LONG).show();
                Intent i = new Intent(context, MainActivity.class);
                context.startActivity(i);
    }

    @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
    }

3 个答案:

答案 0 :(得分:0)

您应该将loading.dismiss();提取到onPostExecute的顶部。 您只检查包含用户尝试成功的案例。

答案 1 :(得分:0)

对于 用户名 密码 等必填字段,您应该验证它(空字符,无效字符,没有足够的长度,等...)传递到网络层(在您的情况下由后台线程处理)。

在您的代码中,在后台线程完成任务时关闭对话框。在回调方法 onPostExecute 上,您应该删除 中的 loading.dismiss(); 条件然后将它放在回调方法的顶部,在所有if-else块之外。

答案 2 :(得分:0)

onPostExecute方法更改为

@Override
        protected void onPostExecute(String  result) {
           // alertDialog.setMessage(result);
          //  alertDialog.show();
               loading.dismiss();
            if (result.contains("Successfully")) {

                Toast.makeText(context, result, Toast.LENGTH_LONG).show();
                Intent i2 = new Intent(context, Login.class);
                context.startActivity(i2);
            } else if(result.contains("Congratulations")) {
                Toast.makeText(context, result, Toast.LENGTH_LONG).show();
                Intent i = new Intent(context, MainActivity.class);
                context.startActivity(i);
    }