2016-11-09 2 views
-1

Ich habe einen Zeichenfolgewert aus JSON erhalten, aber wenn ich diesen JSON-Wert zu einem JSON-Array hinzufügen, gibt es einen Fehler, dass String Wert nicht in JSONArray konvertieren kann. Bitte hilf mir.So erhalten Sie mehrere Rückgabewert von JSON in Android

In der Antwort gibt es drei Werte in "Value"

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(); 
    } 
} 

Dies ist eine Funktion, die ich Rückgabewert:

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; 
} 

Dies ist das JSON-Format:

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

Diese Funktion, die ich eine Antwort von JSON erhalten habe:

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

bitte me.i haben auch helfen – dipaks

+0

JSON Seite Code hinzugefügt Wie sieht Ihr json aussehen? –

+0

"{" Wert ":" 150 "}"; wie dieses – dipaks

Antwort

0

zuerst Ihre MenuRate Methode gibt String nicht JSONObject. Also musst du das als String bekommen und in JSONObject umwandeln, wie unten gezeigt.

@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; 
} 

nicht vergessen Sie die JsonException, kein Problem, wie einige es fragen hinzuzufügen, um die Ausnahme hinzuzufügen.

Nun wird der String-Wert zu JSON konvertiert, so können Sie jetzt die Werte holen und während der Verwendung opt statt get wie optJsonArray("key") statt getJsonArray("key") durch diese Art und Weise holen wir Nullwert statt Ausnahme erhalten, wenn der Schlüssel nicht ist in der JSON vorhanden.

Jetzt kommt auf die "Wert" -Taste Zugriff in Ihrer JSON-Antwort. Unten ist der JSON-Wert, den Sie zur Verfügung gestellt haben,

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

In Ihrer Frage, die Sie erwähnt haben, dass Sie einen JSON-Array mit der Taste „Wert“ zugreifen müssen. Aber in diesem gibt es kein Array mit Schlüssel "Wert". Der folgende Code erklärt Ihnen, wie Sie auf den String-Wert "" "und den Parameter" Json-Array zugreifen können.

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(); 
} 

Hoffe, das ist hilfreich :)

+0

Ich möchte nicht Name von Json Ich möchte nur den Rückgabewert dieser Funktion erhalten. – dipaks

+0

return item_rate; in dieser Artikelrate habe ich 3 Werte, die ich in Android gesendet habe und ich habe auch diesen 3 Wert bekommen, aber ich brauche nur einen Wert davon, wie man diesen einen Wert bekommt, bitte sagen Sie mir – dipaks

+0

Sie wollen einen Wert von der JSON, die du gepostet hast? Wenn ja, dann sagen Sie uns, von welchem ​​Schlüssel Sie diesen einen Wert wollen. – Jeevanandhan

Verwandte Themen