Progressdialog在排球响应区内没有被解雇

时间:2016-05-19 08:20:17

标签: android progressdialog

我的应用程序执行上传操作到后端php服务器。我的问题是我无法解除里面的progressdialog凌空Onresponse()方法.Onresponse()方法被执行并且toast在Progressdialog的后台显示,这意味着Onresponse()得到现在叫做。

我公开宣布了ProgressDialog变量

onCreate()方法如下所示

    ProgressDialog dialog;
    protected void onCreate(Bundle savedInstanceState) 
    {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.signup);

            btn.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {
                      dialog=new ProgressDialog(context,ProgressDialog.STYLE_SPINNER);
                      dialog.setIndeterminate(true);
                      dialog.show(context,"Signing up","Please wait...");
                      login_call();
             }

Login_call()执行截击请求,在onResponse()内我需要关闭对话框,但它无效。

    public void login_call() 
    {
         RequestQueue queue= Volley.newRequestQueue(getApplicationContext());
         StringRequest request = new StringRequest(Request.Method.POST, "http://192.168.56.1/sign.php", new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            if (response.equals("success")) 
            {

                dialog.dismiss();

                getApplicationContext().startActivity(new Intent(getApplicationContext(), MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
            } 
            else 
            {
                dialog.dismiss()
                Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            dialog.dismiss();
            Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
        }
    }


    ) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> param = new HashMap<>();
            param.put("user",user.getText().toString());
            param.put("pass",pass.getText().toString());
            param.put("name",name.getText().toString());
            param.put("mob",mob.getText().toString());
            param.put("email",email.getText().toString());
           param.put("photo",photo);
            return param;
        }
    };

    queue.add(request);
 }

Toast消息显示正确,但progressdialog没有被解雇。

enter image description here

任何解决问题的想法??

3 个答案:

答案 0 :(得分:1)

首先,你没有检查所有条件

new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        if (response.equals("success")) {
         dialog.dismiss();
            getApplicationContext().startActivity(new Intent(getApplicationContext(), MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
        **} else {
            Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
        }**
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
       dialog.dismiss();
        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
    }

else块不会隐藏对话框,因此您应该以这种方式更改它

new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        dialog.dismiss();
        if (response.equals("success")) {
            getApplicationContext().startActivity(new Intent(getApplicationContext(), MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
        } else {
            Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
       dialog.dismiss();
        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
    }

我认为错误就是这个,当然假设您的对话框可以通过回调访问

答案 1 :(得分:1)

只需改变一下:

RequestQueue queue= Volley.newRequestQueue(getApplicationContext());
StringRequest request = new StringRequest(Request.Method.POST, "http://192.168.56.1/sign.php", new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {

        dialog.dismiss(); // write it there

        if (response.equals("success")) {

       // dialog.dismiss(); remove this from here..!!


            getApplicationContext().startActivity(new Intent(getApplicationContext(), MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

            );
        } else {
            Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
       dialog.dismiss();
        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
    }
}
  

编辑:设置此

dialog.setIndeterminate(false);

答案 2 :(得分:1)

更改Dialog.show方法以使用此版本:show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable),如下所示:

final ProgressDialog dialog = ProgressDialog.show(context, "Signing up","Please wait...", false, true); 

因此,您的onClick代码应更改为以下内容:

public void onClick(View view) {
    final ProgressDialog dialog = ProgressDialog.show(context, "Signing up","Please wait...", false, true); 
    login_call();
     }

请试一试,如果有帮助请告诉我。