You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从方法响应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")的逻辑有问题——BundletoString()会返回整个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

火山引擎 最新活动