2016-01-03 19 views
6

To mój StringjsonObject.addProperty metodą jest dodawanie niepotrzebnych cudzysłów i ukośniki do jego wartość

String currentTokenNo = "/SUeSjUf0A0aLFr+wVIZbw==\nLmmWtgHZ90yH0NBoATYB/A" 

Dodałem ten ciąg do mojego JsonObject który jest klasą com.google.gson.JsonObject pakietu

JsonObject jsonToSubmit = new JsonObject(); 

    try { 

     jsonToSubmit.addProperty("token", currentTokenNo); 

     } catch (Exception e) { 

     e.printStackTrace(); 
    } 

Ale gdy loguję mój String i JsonObject

Log.d("mainactivityjson", "Current Token No : "+currentTokenNo); 
Log.d("mainactivityjson", "jsonToSubmit : "+jsonToSubmit); 

znalazłem wynik

D/mainactivityjson: Current Token No : "/SUeSjUf0A0aLFr+wVIZbw==\nLmmWtgHZ90yH0NBoATYB/A" 
D/mainactivityjson: jsonToSubmit : {"token":"\"/SUeSjUf0A0aLFr+wVIZbw==\\nLmmWtgHZ90yH0NBoATYB/A\""} 

Teraz moje pytanie:

Dlaczego te cudzysłów i ukośniki są dodawane do wartości JsonObject? Czy istnieje jakikolwiek odpowiedni powód?

To naprawdę utrudnia proces sprawdzania wartości String po stronie serwera.

Zrobiłem tymczasowe rozwiązanie, aby wykonać zadanie poprzez przycinanie pojedynczy znak z obu stron jak po

jsonToSubmit.addProperty("token",currentTokenNo.substring(1,currentTokenNo.length()-1)); 

To działało idealnie Ale nie sądzę, że to lepszy pomysł na przyszłość !! !

Dodatkowe informacje:

Zmienna currentTokenNo nie jest zadeklarowana bezpośrednio, jak pokazano powyżej, została pobrana z SharedPreferences & Jeżeli zostanie ogłoszony bezpośrednio potem wszystko działa poprawnie.

String currentTokenNo = preferences.getString(LOGINCRED_TOKEN,""); 

Jeśli ta sama zmienna zostanie zadeklarowana bezpośrednio, wszystko działa poprawnie.

Każdy rodzaj pomocy zostanie doceniony.

+0

Czy jesteś pewien, że zmienna 'currentTokenNo' jest zadeklarowana jako' String'? – miensol

+0

@miensol tak, jestem pewien! Jest generowana zaszyfrowana forma ciągu znaków. –

+0

Jaki rodzaj ciągu znaków przechodzisz? Czy char, const char, coś w tym stylu? Czy masz jakieś kodowanie, takie jak UTF8 lub akademik, wskazane w dowolnym miejscu? Wiecie, że to dziwne pytanie, tylko lepiej zrozumieć, co przechodzicie, – iSkore

Odpowiedz

2

Z uwagi i logcat informacji, rzeczywista wartość jest uzyskanie od SharedPreferences"/SUeSjUf0A0aLFr+wVIZbw==y9iWl1SSrUe9zRQppENMNA" (o cudzysłów) nie /SUeSjUf0A0aLFr+wVIZbw==y9iWl1SSrUe9zRQppENMNA.Dlatego masz jsonToSubmit : {"token":"\"/SUeSjUf0A0aLFr+wVIZbw==y9iWl1SSrUe9zRQppENMNA\""}


UPDATE:

Dla Państwa rozwiązanie tymczasowe: jsonToSubmit.addProperty("token",currentTokenNo.substring(1,currentTokenNo.length()-1));

Wolę następujący sposób:

jsonToSubmit.addProperty("token", currentTokenNo.replaceAll("\"","")); 

Jeśli chcesz także usunąć ukośniki, a następnie użyć:

jsonToSubmit.addProperty("token", currentTokenNo.replaceAll("\"","").replaceAll("/","")); 

Nadzieję, że to pomaga!

+0

Jeśli tak, to w jaki sposób zapisać ciąg do współdzielonych preferencji bez znaków quatation. –

+0

Pls po kodzie, którego używasz do zapisania go – BNK

+0

Jeśli możesz spojrzeć na plik xml SP, zobaczysz coś w następujący sposób: ' _ bcfPG5ToPzecCGxrosgA6AKNHgdfieuKEXxmQZUz-9ACg [email protected] ' – BNK

2

Cokolwiek otrzymasz w swoim logcat jest poprawne.

Poniżej przedstawiamy kilka punktów i dlaczego, które zdarzają się tak:

1) Niepotrzebne ukośniki dodane do tokenu. Czemu? Ponieważ twój token zawiera ukośnik (\), który jest postacią znikającą. Więc zostanie napisany jako podwójny ukośnik (\\) zamiast pojedynczego ukośnika (\).

2) Niepotrzebny cudzysłów dodany do Twojego tokena. Czemu? Znów Twój token jest obiektem typu String i zaczyna się od cytowania ("). Więc zostanie zapisany jako \".

Ogólny token zmienia się z "/SUeSjUf0A0aLFr+wVIZbw==\nLmmWtgHZ90yH0NBoATYB/A" na "\"/SUeSjUf0A0aLFr+wVIZbw==\\nLmmWtgHZ90yH0NBoATYB/A\"". Ale nie musisz się martwić, ponieważ zawsze, gdy dostaniesz dane tokena od JsonObject, zawsze otrzymasz ten sam token, który został dodany.

Aby uzyskać więcej informacji na temat charakteru ewakuacyjnej, zobacz tutaj: https://docs.oracle.com/javase/tutorial/java/data/characters.html

0

Jest jakiś czas po tym pisał, ale dlaczego nie użyć org.json.JSONObject zamiast?

Nie musisz robić tego kłopotliwego usuwania niepotrzebnych cudzysłowów i usuwania ukośników.

Z wyjątkiem sytuacji, gdy próbujesz zrobić coś takiego, jak dodanie yourJsonObject.toString() do innego JSONObject.