2016-07-18 8 views
1

Ich bin nicht in der Lage herauszufinden, JSON Anfrage von Codenamen eine API setzen. Ich habe kein Beispiel gefunden, um diese Anfrage zu stellen.Wie mache ich JSON PUT Anfrage über Codename eine API

Fragen: 1. Ich bin nicht sicher, ob ich den Inhalt Länge Parameter senden muss. Wenn ja, wie kann ich das senden? 2. Ich muss die Anfrage Körper mit nur "wahr" nichts anderes senden. Es gibt keinen Schlüssel und keinen Wert für die req.addArgument() -Methode. 3. Muss ich die Methode buildRequestBody() verwenden, um die Anforderung zu überschreiben? Können Sie ein Beispiel geben? 4. Wie verifiziere ich das Ergebnis nach Erhalt der Antwort?

Jede Hilfe kann geschätzt werden. Danke.

Den Code finden Sie unten.

req.setUrl(identityUrl); 
req.setPost(false); 
req.setHttpMethod("PUT");    
req.setContentType("application/json"); 
req.addRequestHeader("authorization", token); 
req.addArgument("Content-Length", "4"); 
req.setReadResponseForErrors(true); 
InfiniteProgress ip = new InfiniteProgress(); 
Dialog d = ip.showInifiniteBlocking(); 
NetworkManager.getInstance().addToQueueAndWait(req); 
d.dispose(); 
JSONParser parser = new JSONParser(); 
Map map2 = null; 
try { 
map2 = parser.parseJSON(new InputStreamReader(new ByteArrayInputStream(req.getResponseData()), "UTF-8")); 
} catch (IOException ex) { 
     ex.printStackTrace(); 
} 

Antwort

0

Wenn Sie die Inhalte wollen ganz eingebettet werden, müssen Sie die buildRequestBody Methode außer Kraft zu setzen. Beachten Sie, dass der Eintrag für den anzurufenden Körper wahr sein muss.

Ich glaube nicht, Sie content-length brauchen:

req = new ConnectionRequest(identityUrl) { 
    protected void buildRequestBody(OutputStream os) throws IOException { 
     os.write(json.getBytes("UTF-8")); 
    } 

    protected void readResponse(InputStream input) throws IOException { 
     map2 = parser.parseJSON(new InputStreamReader(input, "UTF-8")); 
    } 

    protected void postResponse() { 
     // response completed, this is called on the EDT do the application logic here... 
    } 
}; 
req.setPost(true); 
req.setHttpMethod("PUT");    
req.setContentType("application/json"); 
req.addRequestHeader("authorization", token); 
req.setReadResponseForErrors(true); 
InfiniteProgress ip = new InfiniteProgress(); 
Dialog d = ip.showInifiniteBlocking(); 
req.setDisposeOnCompletion(d); 
NetworkManager.getInstance().addToQueue(req); 

Beachten Sie, dass ich nicht mehr Ströme schließen müssen oder Griff IOException als Verbindungsanforderung alles für mich tut. Beachten Sie auch, dass die Lese-/Build-Methoden in den Netzwerk-Threads und nicht auf dem EDT aufgerufen werden, so dass Sie den Rest des Flusses im postResponse erledigen müssen.

+0

FYI wenn eine Frage korrekt/hilfreich ist, upvote und markieren Sie das Kontrollkästchen daneben, um es zu akzeptieren. Dadurch erhalten Sie Punkte, die zusätzliche Privilegien innerhalb der Stack-Overflow-Community bieten. –