如何在Android

时间:2016-11-09 12:52:03

标签: android json

我从JSON收到了一个字符串值,但是当我将JSON值添加到JSON数组时,它会给出一个错误,指出它无法将String值转换为JSONArray。请帮帮我。

在回复中,"值"

中有3个值
protected class AsyncMenuRate extends
        AsyncTask<ForGettingRate, JSONObject, JSONObject> {

    JSONObject jsonObj = null;

    @Override
    protected JSONObject doInBackground(ForGettingRate... params) {
        RestAPI api = new RestAPI();

        try {

            jsonObj = api.MenuRate(params[0].getTableId(), params[0].getMenulist());

        } catch (Exception e) {
            // TODO Auto-generated catch block
            Log.d("AsyncCreateUser", e.getMessage());
        }
        return jsonObj;
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    @Override
    protected void onPostExecute(JSONObject objects) {

        try {
            //String ss= objects.getString("Value").;
            JSONArray jarray=objects.getJSONArray("Value");
            //jarray = new JSONArray(ss);
            for (int i = 0; i < jarray.length(); i++) {
                jsonObj = jarray.getJSONObject(i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        Toast.makeText(DisplayActivity.this, "Successfully inserted...", Toast.LENGTH_LONG).show();
    }
}

这是一个我有返回值的函数:

String menuTotal = "0";
String item_rate;

public String MenuRate(int t_id, String menunameoflist) {
    if (dbConnection.State.ToString() == "Closed") {
        dbConnection.Open();
    }

    if (db.ChkDb_Value("select * from table_status where table_type='" + "A/C" + "'and t_id='" + t_id + "'"))
        item_rate = db.getDb_Value("select rate from menu where m_name='" + menunameoflist + "' ").ToString(); // get  the item rate from the tbl

    else if (db.ChkDb_Value("select * from table_status where table_type='" + "Non A/C" + "'and t_id='" + t_id + "'"))
        item_rate = db.getDb_Value("select non_ACrate from menu where m_name='" + menunameoflist + "' ").ToString(); // get  the item rate from the tbl

    else
        item_rate = db.getDb_Value("select driverRate from menu where m_name='" + menunameoflist + "' ").ToString(); // get  the item rate from the tbl

    //menuRate = db.getDb_Value("select menu_id From menu where m_name='" + getMenuname + "'");

    dbConnection.Close();
    return item_rate;
}

这是JSON格式:

{
    "name": "MenuRate",
    "parameters": [
        {
            "name": "t_id",
            "type": "int32"
        },
        {
            "name": "menunameoflist",
            "type": "string"
        }
     ],
     "returnvalue": "string"
 }

这是我从JSON得到回复的功能:

public JSONObject MenuRate(int t_id, String menunameoflist) throws Exception {
    JSONObject result = null;
    JSONObject o = new JSONObject();
    JSONObject p = new JSONObject();
    o.put("interface","RestAPI");
    o.put("method", "MenuRate");
    p.put("t_id",mapObject(t_id));
    p.put("menunameoflist",mapObject(menunameoflist));
    o.put("parameters", p);
    String s = o.toString();
    String r = load(s);
    result = new JSONObject(r);
    return result;
}

1 个答案:

答案 0 :(得分:0)

首先,您的 MenuRate 方法会返回String而不是JSONObject。因此,您必须将其设为String并将其转换为JSONObject,如下所示。

@Override
protected JSONObject doInBackground(ForGettingRate... params) {
    RestAPI api = new RestAPI();

    try {
        String jsonString = api.MenuRate(params[0].getTableId(), params[0].getMenulist());
        return new JSonObject(jsonString);
    } catch (Exception | JsonException e) {
        // TODO Auto-generated catch block
        Log.d("AsyncCreateUser", e.getMessage());
    }

    return jsonObj;
}

不要忘记添加JsonException,没有问题,它会如何要求添加例外。

现在字符串值转换为JSON,所以现在您可以获取值,同时使用opt代替get而不是optJsonArray("key")而不是getJsonArray("key")如果JSON中不存在该键,我们将获得null值而不是异常。

现在进入JSON响应中的“value”键访问。以下是您提供的JSON值,

{
    "name": "MenuRate",
    "parameters": [{
        "name": "t_id",
        "type": "int32"
    }, {
        "name": "menunameoflist",
        "type": "string"
    }],
    "returnvalue": "string"
}

在您提出的问题中,您提到需要使用密钥“”访问json数组。但是在这里没有关键字“ Value ”的数组。因此,下面的代码将向您解释如何访问“名称”字符串值和“参数”Json数组。

try {
    //Name String value...
    String name = objects.optString("name");

    //Parameter Json Array...
    JSONArray parameterarray =objects.optJSONArray("parameters");

    for (int i = 0; i < parameterarray.length(); i++) {
        JsonObject jsonObj = parameterarray.optJSONObject(i);
    }

} catch (Exception e) {
    e.printStackTrace();
}

希望这有用:)