You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Try Catch无法捕获错误:注册页面无提示弹窗问题求助

注册弹窗不显示问题的解决方案

咱们来一步步拆解你遇到的两个问题,然后给出针对性的修复方案:

问题1:未填写任何字段时,try-catch的提示弹窗不弹出

原因分析

你当前的代码没有在发送注册请求前做本地字段校验,直接把空字段传给了后端。而try-catch块只负责处理JSONException(也就是解析后端响应时的异常),如果后端收到空字段后返回了格式正确的JSON(比如{"success":false}),那代码不会进入catch分支,自然不会弹出提示。

修复方案

在发送请求前,先检查所有输入字段是否为空,为空的话直接弹出提示,不用继续执行请求逻辑:

// 在创建RegisterRequest之前添加这段校验
if (name.isEmpty() || email.isEmpty() || age.isEmpty() || password.isEmpty()) {
    AlertDialog.Builder builder = new AlertDialog.Builder(activityregister.this);
    builder.setMessage("请填写所有必填字段!")
            .setNegativeButton("返回修改", null)
            .create()
            .show();
    return; // 终止后续请求流程
}

问题2:邮箱已存在时,预期的提示弹窗无法显示

原因分析

看你的onResponse方法,只有当success为true时执行跳转逻辑,但完全没有处理success为false的情况。catch块只在JSON解析失败时触发,而邮箱已存在时,后端应该会返回格式正确的{"success":false},这时候代码既不会跳转,也不会进入catch,所以没有任何提示。

修复方案

在if (success)后面添加else分支,专门处理注册失败的场景(包括邮箱已存在的情况):

@Override
public void onResponse(String response) {
    try{
        JSONObject jsonResponse = new JSONObject(response);
        boolean success = jsonResponse.getBoolean("success");
        if (success) {
            Intent intent = new Intent(activityregister.this, LoginRegister.class);
            activityregister.this.startActivity(intent);
        } else {
            // 处理注册失败(比如邮箱已存在)的情况
            AlertDialog.Builder builder = new AlertDialog.Builder(activityregister.this);
            builder.setMessage("注册失败!邮箱已存在或信息有误。")
                    .setNegativeButton("重新尝试", null)
                    .create()
                    .show();
        }
    } catch (JSONException e){
        AlertDialog.Builder builder = new AlertDialog.Builder(activityregister.this);
        builder.setMessage("Register is not completed!")
                .setNegativeButton("Retry the registration!",null)
                .create()
                .show();
        e.printStackTrace();
    }
}

完整修复后的代码

把上面的修改整合到你的代码里,完整版本如下:

public class activityregister extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        final EditText register_age = (EditText) findViewById(R.id.register_age);
        final EditText register_email = (EditText) findViewById(R.id.emails_reg);
        final EditText register_name = (EditText) findViewById(R.id.register_name);
        final EditText register_password = (EditText) findViewById(R.id.register_password);
        final Button reg_poga = (Button) findViewById(R.id.registacijas_poga);
        reg_poga.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final String name = register_name.getText().toString();
                final String email = register_email.getText().toString();
                final String age = register_age.getText().toString();
                final String password = register_password.getText().toString();

                // 新增:本地字段非空校验
                if (name.isEmpty() || email.isEmpty() || age.isEmpty() || password.isEmpty()) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(activityregister.this);
                    builder.setMessage("请填写所有必填字段!")
                            .setNegativeButton("返回修改", null)
                            .create()
                            .show();
                    return;
                }

                final Response.Listener<String> responseListener = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try{
                            JSONObject jsonResponse = new JSONObject(response);
                            boolean success = jsonResponse.getBoolean("success");
                            if (success) {
                                Intent intent = new Intent(activityregister.this, LoginRegister.class);
                                activityregister.this.startActivity(intent);
                            } else {
                                // 新增:处理注册失败(含邮箱已存在)的情况
                                AlertDialog.Builder builder = new AlertDialog.Builder(activityregister.this);
                                builder.setMessage("注册失败!邮箱已存在或信息有误。")
                                        .setNegativeButton("重新尝试", null)
                                        .create()
                                        .show();
                            }
                        } catch (JSONException e){
                            AlertDialog.Builder builder = new AlertDialog.Builder(activityregister.this);
                            builder.setMessage("Register is not completed!")
                                    .setNegativeButton("Retry the registration!",null)
                                    .create()
                                    .show();
                            e.printStackTrace();
                        }
                    }
                };
                RegisterRequest registerRequestt= new RegisterRequest(name, email, age, password, responseListener);
                RequestQueue Que = Volley.newRequestQueue(activityregister.this);
                Que.add(registerRequestt);
            }
        });
    }
}

这样修改后,两个问题都能得到解决:空字段时会直接弹出提示,邮箱已存在时也会在else分支里显示对应的弹窗。

内容的提问来源于stack exchange,提问作者humble man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:35:35