首页 > 解决方案 > ProgressBar 没有停止

问题描述

我的应用程序包含一个登录按钮,每当按下该按钮时,我都希望显示一些进度条,以便用户知道发生了什么事。我在 XML 中有进度条,但现在我不知道如何在代码中设置它。请指导我在哪里放置行,就像我按下登录按钮时显示的进度条一样,这是我的代码

<ProgressBar
    android:id="@+id/loading"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/layout_password"
    android:layout_marginTop="30dp"
    android:visibility="gone"/>


<Button
    android:id="@+id/login"
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:text="login"
    android:layout_below="@id/layout_password"
    android:layout_marginTop="30dp"/>

MainActivity.java

public class MainActivity extends AppCompatActivity {

TextView textView;
EditText email,password;
Button login;
String url="http://192.168.1.5/Register/login.php" ;

AlertDialog.Builder builder;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView=findViewById(R.id.register);
    textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(MainActivity.this,Register.class);
            startActivity(intent);
        }
    });

    email=findViewById(R.id.email);
    password=findViewById(R.id.password);
    login=findViewById(R.id.login);

    builder=new AlertDialog.Builder(MainActivity.this);

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String user_email=email.getText().toString();
            final String user_password=password.getText().toString();

            if (user_email.equals("")||user_password.equals("")){
                builder.setTitle("Something Went Wrong...");
                dispalyAlert("Enter a valid Email and Password");
            }
            else {
                StringRequest stringRequest=new StringRequest(Request.Method.POST, url,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {

                                try {
                                    JSONArray jsonArray=new JSONArray(response);
                                    JSONObject jsonObject=jsonArray.getJSONObject(0);
                                    String code=jsonObject.getString("code");
                                    if (code.equals("login_failed")){
                                        builder.setTitle("Login Error...");
                                        dispalyAlert(jsonObject.getString("message"));
                                    }
                                    else {
                                        Intent intent=new Intent(MainActivity.this,LoginSuccess.class);
                                    Bundle bundle=new Bundle();
                                    bundle.putString("name",jsonObject.getString("name"));
                                   // bundle.putString("email",jsonObject.getString("email"));
                                    intent.putExtras(bundle);
                                    startActivity(intent);
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }

                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                        Toast.makeText(MainActivity.this,"Error",Toast.LENGTH_LONG).show();
                        error.printStackTrace();
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String,String> params=new HashMap<>();
                        params.put("email",user_email);
                        params.put("password",user_password);
                        return params;
                    }
                };
                MySingleton.getInstance(MainActivity.this).addToRequestQueue(stringRequest);
            }
        }
    });
}

private void dispalyAlert(String message){
    builder.setMessage(message);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            email.setText("");
            password.setText("");
        }
    });

    AlertDialog alertDialog=builder.create();
    alertDialog.show();
}

标签: androidprogress-bar

解决方案


当用户单击按钮时,您应该设置进度条可见:

login.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        final String user_email=email.getText().toString();
        final String user_password=password.getText().toString();
         if (user_email.equals("")||user_password.equals("")){
            builder.setTitle("Something Went Wrong...");
            dispalyAlert("Enter a valid Email and Password");
        }else{  //Right here
            findViewById(R.id.loading).setVisible(View.VISIBLE);

您必须在停止加载时将可见性设置为消失:

    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            try {
                JSONArray jsonArray=new JSONArray(response);
                JSONObject jsonObject=jsonArray.getJSONObject(0);
                String code=jsonObject.getString("code");
                if (code.equals("login_failed")){
                    builder.setTitle("Login Error...");
                    dispalyAlert(jsonObject.getString("message"));
                }
                else {
                    Intent intent=new Intent(MainActivity.this,LoginSuccess.class);
                    Bundle bundle=new Bundle();
                    bundle.putString("name",jsonObject.getString("name"));
                    // bundle.putString("email",jsonObject.getString("email"));
                    intent.putExtras(bundle);
                    startActivity(intent);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            findViewById(R.id.loading).setVisible(View.GONE); ////Here
        }

    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            findViewById(R.id.loading).setVisible(View.GONE); //Here
            Toast.makeText(MainActivity.this,"Error",Toast.LENGTH_LONG).show();
            error.printStackTrace();
        }

推荐阅读