2016-08-05 57 views
0

Am Abrufen von Informationen aus meiner SQLite-Datenbank auf CardViewSQLite Daten JsonObject Klasse Set ohne String

Meine SQLite-Datenbank-Struktur SQLite DB

Meine Klasse ist

public class ServiceRequest{ 
    public String reqid; 
    public String name; 
    public String branch; 
    public Date date; 
    public Date time; 
    public String services; 
    //Getter and setter 
    ............. 
    ............. 
    } 

Ich kann angezeigt werden mit konvertieren dies zu JSON-Format mit

List<ServiceRequest> reqs = getAllReqs(); 
    List<ServiceRequest> jobservList = new ArrayList<>(); 

    for (ServiceRequest access : reqs) { 
     ServiceRequest ob = new ServiceRequest(); 

     ob.setId(access.getId()); 
     ob.setBranch(access.getBranch()); 
     ob.setName(access.getName()); 
     ob.setDate(access.getDate()); 
     ob.setTime(access.getTime()); 
     ob.setServices(access.getServices()); 
     jobservList.add(ob); 
    } 

    Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
    String json2 = gson.toJson(jobservList); 
    return json2; 

, aber mein Wunsch JSONObject Format ist

{ 
"100": { 

     "name": "Rahul Suresh", 
     "branch": "Koramangala", 
     "phNumber":"123456", 
     "date": "2016-08-06", 
     "time": "16:00", 
     "reqServices": "Loans" 
     }, 
"200": { 
     "name": "Sidh", 
     "branch": "Jayanagar", 
     "phNumber":"182694", 
     "date": "2016-08-12", 
     "time": "11:00", 
     "reqServices": "OpenAcc,SafeDeposit" 
     } 
    } 

so, dass ich eine ganze JSON-Objekt mit einem einzigen Anruf bekommen

JSONObject jb = (JSONObject) jsonObject.get(Integer.toString(id)); 

100.200 sind 'reqid' s

Es ist möglich, dies zu erreichen, verwenden String Builder. Aber gibt es andere Möglichkeiten, dies zu implementieren, wie zum Beispiel einen Objekt-Mapper zusammen mit einer Klasse oder etwas zu verwenden?

+0

Ihre Klassenstruktur nicht korrekt ist, wenn Sie ein Objekt Mapper wie Gson verwenden möchten oder Jackson. Die ID müsste im inneren Objekt sein, nicht der Schlüssel –

+0

@ cricket_007 Das ist mir bewusst ... Da ich JSON auf dem angegebenen Format haben möchte, suche ich einen anderen Weg als einen String Builder zu erstellen. –

+0

Es ist möglich, mit einer Hashmap von Ganzzahl zu Ihrer Klasse, dann haben Gson konvertieren, dass –

Antwort

1

Wenn Sie den JSON, den Sie angezeigt haben, bilden möchten, können Sie die ID in einen HashMap-Schlüssel "ziehen" und dann den Wert als Ihr Objekt festlegen.

Ich kann mich nicht daran erinnern, wie Gson die Umwandlung der Objektwerte in der Karte behandelt, aber das ist die allgemeine Idee

List<ServiceRequest> reqs = getAllReqs(); 

HashMap<Integer, ServiceRequest> map = new HashMap<Integer, ServiceRequest>(); 
for (ServiceRequest access : reqs) { 
    map.put(access.getId(), access); 
} 

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
String json2 = gson.toJson(map); // TODO: Not sure if this will work 
return json2;