J'essaye de passer le paramètre à api en utilisant JSON.
class Sample
{ ...
String token;
...
void method()
{ ...
JSONObject params = new JSONObject();
params.put(KEY_TOKEN,token);
params.put(KEY_DATE,date);
Log.e("params ",params+"");
... }
J'obtiens la valeur de params sous la forme {"date":"2017-06-19"}
mais le jeton n'est visible nulle part . Je n'ai pas initialisé le jeton et sa valeur est null en tant que variable d'instance. Alors, est-ce que c'est quelque chose que les valeurs non initialisées ne sont pas incluses?
Juste là dans la documentation , dans le premier paragraphe:
Les valeurs peuvent ne pas être
null
,NaN
s, infinity ou de tout type non répertorié ici.
Alors oui, c’est "... quelque chose dont les valeurs null
ne sont pas incluses ..."(edit: c’était une citation de votre question initiale; votre question mise à jour la change en "valeurs non initialisées "mais la valeur par défaut d’une référence d’objet est null
, donc ...)
C'est une "caractéristique" de cette classe, cependant; JSON lui-même comprend null
très bien. Plus bas dans la documentation, vous indiquez que vous utilisez une "valeur sentinale" NULL
, pour représenter null
. Ce qui semble ... étrange. Il y a une note à ce sujet:
Warning: cette classe représente
null
de deux manières incompatibles: la référence Javanull
standard et la valeur sentinelleNULL
. En particulier, l'appel deput(name, null)
supprime l'entrée nommée de l'objet, maisput(name, JSONObject.NULL)
enregistre une entrée dont la valeur estJSONObject.NULL
.
Alors:
params.put(KEY_TOKEN, token == null ? JSONObject.NULL : token);
Selon RFC 4627 , JSON considère le symbole null
comme une valeur valide.
Le problème est que JSON null
représente la valeur Javascript null
. En revanche, la version Java de null
est (selon les experts) plus alignée sur la valeur undefined
de Javascript.
L'auteur original de la bibliothèque org.json
a décidé que JSONObject
devrait traiter JSON null
d'une manière compatible avec la sémantique Javascript. Par conséquent, il est représenté (en Java) par JSONObject.NULL
.
Json lui-même accuse null mais la classe JSONOBJECT ne le fait pas. Par conséquent, vous ne pouvez pas le faire. Essayez également d’utiliser Jackson/gson pour json et le mappage d’objets. Si vous avez besoin d'aide, faites le moi savoir.