2016-11-09 69 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