2014-04-14 6 views
11

Sto utilizzando GSON per creare un oggetto SugarRecord da una risposta JSON. L'API che sto usando restituisce un campo chiamato "id", ma il tipo di "id" è una stringa, non lunga (il backend sta usando mongo).Analisi di un ID stringa con SugarORM e GSON

Di seguito è riportato il codice che sto usando:

Gson gson = new Gson(); // Or use new GsonBuilder().create(); 
NutritionPlan target = gson.fromJson(jsonObject.getJSONObject("nutrition_day").toString(), NutritionPlan.class); 

Qui di seguito è la mia risposta JSON:

{ 
"nutrition_day": { 
    "id": "5342b4163865660012ab0000", 
    "start_on": "2014-04-08", 
    "protein_target": 157, 
    "sodium_limit": 2000 
} 

C'è un buon modo per gestire questo scenario? Ho provato

@Ignore 
long id; 

e

@SerializedName("id") 
String nutrition_plan_id; 

nel mio modello, ma nessuno dei due ha aiutato. Qualcuno ha familiarità con Sugar ORM e sa come gestire un campo id che non è lungo?

+0

perché non prendi "long id" dal tuo modello? – CQM

+0

provato. il lungo tipo di ID viene automaticamente da SugarRecord. Sto cercando di sovrascriverlo e cambiarlo in un tipo di stringa – coder

risposta

0

Mi sono interessato allo stesso problema e l'unica soluzione che ho trovato è stata quella di rinominare il nome id dalla mia API. Dall'esempio prova a inviare nutrition_plan_id anziché id dalla tua API e questo avrebbe fatto il lavoro.

+1

L'unico problema è che sto usando un'API di terze parti, quindi non posso modificare l'id. – coder

0

Ecco la mia soluzione, ma non sarà la migliore.

ho appena ignorato id nel mio feed

public class Feed extends SugarRecord<Feed> { 

    @Expose int idMember; 
} 

Funziona bene, ma la vera id non è più utilizzato.

4

Sostituire la chiave "id" nella stringa per essere "nutrition_day_id". Puoi usare id json e id sql.

jsonObject.getJSONObject("nutrition_day").toString().replace("\"id\"","\"nutrition_day_id\"") 
1

mi ha aiutato a cambiare nome in idmid e aggiungere annotazioni @Expose a tutti i campi che devono essere serializzato e aggiungere annotazioni @SerializedName alla nuova id campo.

@SerializedName("id") 
@Expose 
private final String mid; 

@Expose 
private final String street; 
0

stavo cercando una soluzione a questo problema per un po 'di tempo. Finalmente ho trovato una soluzione. Aggiungi semplicemente l'annotazione @Table alla classe desiderata invece di estenderla da SugarRecord e aggiungi manualmente l'attributo id. È possibile escluderlo dalla serializzazione di Gson tramite la parola chiave transient o/e rinominarlo con l'annotazione @SerializedName.

Esempio (funziona bene per me su SugarOrm v1.4):

@Table 
public class MySugarOrmClass{ 

    @SerializedName("db_id") 
    private transient Long id = null; 

    @SerializedName("id") 
    private Integer aid; 

    // Add an empty constructor 
    public MySugarClass(){} 


    //Other fields and class attributes 
    ... 
} 

Ma questo significa che non è possibile utilizzare .save(), .delete(), ecc metodi in questa classe. Invece devi usare i metodi statici di SugarRecord: SugarRecord.save(), SugarRecord.delete(), ...