如何从方法响应JSON获取指定对象及实现条件触发方法调用
针对你的两个问题的解决方案
1. 从JSON响应中获取特定对象
首先得明确你的JSON响应形式——是字符串格式的JSON,还是已经封装在Bundle里的键值对?结合你给出的代码,我猜你是要从Bundle里提取JSON相关数据,咱们分两种情况说明:
如果响应是JSON字符串:
先把字符串转成JSONObject,再通过键名获取对应的对象或值。示例代码如下:// 从Bundle中取出存储JSON字符串的键值 String jsonResponse = inResponse.getString("your_json_key"); try { JSONObject responseObj = new JSONObject(jsonResponse); // 获取嵌套的特定JSON对象 JSONObject specificObj = responseObj.getJSONObject("target_object_key"); // 获取单个字段值,比如你的RESPCODE String respCode = responseObj.getString("RESPCODE"); } catch (JSONException e) { e.printStackTrace(); // 处理JSON解析异常,比如提示用户响应格式错误 }如果
Bundle直接存储了键值对(后端已将JSON拆分为Bundle键值):
直接通过键名取值即可:String respCode = inResponse.getString("RESPCODE");
2. 根据RESPCODE判断是否调用目标方法
你当前代码里inResponse.toString().equals("01")的逻辑有问题——Bundle的toString()会返回整个Bundle的内容字符串,并非单个RESPCODE字段的值。咱们修正后的完整代码如下:
@Override public void onTransactionResponse(Bundle inResponse) { Log.d("LOG", "Payment Transaction response: " + inResponse); // 先从Bundle中获取RESPCODE的值 String respCode = inResponse.getString("RESPCODE"); // 用常量在前的equals判断,避免respCode为null时抛出空指针异常 if ("01".equals(respCode)) { CheckoutProcess(); // 满足条件时调用目标方法 } else { Toast.makeText(getApplicationContext(), "Transaction Failed", Toast.LENGTH_LONG).show(); } }
如果RESPCODE嵌套在Bundle里的JSON字符串中,需要先解析JSON再取值:
@Override public void onTransactionResponse(Bundle inResponse) { Log.d("LOG", "Payment Transaction response: " + inResponse); String jsonStr = inResponse.getString("transaction_response"); // 假设JSON存储在此键下 try { JSONObject responseObj = new JSONObject(jsonStr); String respCode = responseObj.getString("RESPCODE"); if ("01".equals(respCode)) { CheckoutProcess(); } else { Toast.makeText(getApplicationContext(), "Transaction Failed", Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); Toast.makeText(getApplicationContext(), "Failed to parse transaction response", Toast.LENGTH_LONG).show(); } }
额外提示:
- 调试时可以在Log中打印
respCode的值,确认是否正确获取 - 务必处理JSON解析异常,避免因响应格式错误导致APP崩溃
内容的提问来源于stack exchange,提问作者user9658973




