2016-11-09 43 views
-1

我从JSON收到了一个字符串值,但是当我将该JSON值添加到JSON数组时,它给出了一个错误,指出它不能将String值转换为JSONArray。请帮帮我。如何从Android中的JSON获取多个返回值

在响应中有 “值” 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; 
} 
+0

请帮助我,我也加入了JSON端代码 – dipaks

+0

请问你JSON是什么样子? –

+0

“{”Value“:”150“}”;像这样 – dipaks

回答

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,而不是getoptJsonArray("key")而不是getJsonArray("key")通过这种方式,我们将得到空值,而不是例外,如果关键是不目前在JSON中。

现在来到您的JSON响应中的“值”键访问。以下是您所提供的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(); 
} 

希望这是有益:)

+0

我不想从json获取名称,我只想获取该函数的返回值。 – dipaks

+0

return item_rate;在这个项目率我有3个值,我已经在android中发布了,我也得到了3值,但我只需要一个值如何得到那个值请告诉我 – dipaks

+0

你想从一个值你已经发布的json? 如果是这样,那么告诉我们你需要哪一个键值。 – Jeevanandhan