Android Java登录页:服务器返回Status=Y后跳转Activity问题求助
Android Java登录页跳转问题解决方法
原代码存在的核心问题
- 字符串比较误用
==:Java中字符串内容相等需用equals()/equalsIgnoreCase(),==仅比较对象引用地址。 - 响应内容处理错误:直接将完整JSON响应与"Y"对比,未解析JSON提取目标字段。
- 异常逻辑颠倒:将跳转逻辑放在
catch块(仅解析失败时执行),正确逻辑应在解析成功的try块中。 - 静态方法误用:错误调用
JSONObject.getString()静态方法,需通过解析后的实例调用。 - 字段名大小写不匹配:用户标注服务器返回字段为
Status,但原代码中用了小写status,这是导致匹配失败的常见原因。
修正后的完整代码
btSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { JSONObject jsonObject = new JSONObject(); try { jsonObject.put("app_id", "123456"); jsonObject.put("username", etUsername.getText().toString()); jsonObject.put("password", etPassword.getText().toString()); jsonObject.put("firebase_token", "123456"); } catch (JSONException e) { e.printStackTrace(); } OkHttpClient client = new OkHttpClient(); MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(JSON, jsonObject.toString()); Request request = new Request.Builder() .url("your_server_url_here") // 替换为实际接口地址 .post(body) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); MainActivity.this.runOnUiThread(() -> { TextViewResult.setText("网络请求失败"); }); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String myResponse = response.body().string(); MainActivity.this.runOnUiThread(() -> { try { JSONObject obj = new JSONObject(myResponse); // 严格匹配服务器返回的字段名:Status(注意大小写) String status = obj.getString("Status"); // 调试打印 System.out.println("Status: " + status); System.out.println("status_desc: " + obj.getString("status_desc")); System.out.println("token_id: " + obj.getString("token_id")); // 判断Status为Y时跳转 if ("Y".equals(status)) { Intent intent = new Intent(MainActivity.this, MainActivity2.class); startActivity(intent); } else { TextViewResult.setText("登录失败:" + obj.getString("status_desc")); } } catch (JSONException e) { e.printStackTrace(); TextViewResult.setText("响应解析失败"); } }); } else { MainActivity.this.runOnUiThread(() -> { TextViewResult.setText("请求失败,状态码:" + response.code()); }); } } }); } });
关键修改说明
- 字符串安全比较:用
"Y".equals(status)避免空指针异常(若status为null时不会崩溃)。 - 修正字段名:严格匹配服务器返回的
Status字段大小写,这是最容易忽略的匹配失败原因。 - 调整逻辑位置:将跳转逻辑放在
try块内,确保JSON解析成功后才执行判断。 - 完善错误提示:添加网络失败、请求失败、解析失败的友好提示,方便调试定位问题。
内容的提问来源于stack exchange,提问作者kimhong toh
相关产品推荐
相关产品推荐

