2017-08-21 2 views
0

Ich versuche gerade eine POST-Methode über die HttpURLConnection-Klasse an einen einfachen PHP-Webservice über eine Android-Anwendung zu senden. Mehrere Lernprogramme verwenden die gepufferte Writer-Klasse, um die Parameter in den HTTP-Body zu schreiben, aber die HttpURLConnection hat auch eine setRequestProperty() -Methode, die der Verbindung ein Schlüssel-Wert-Paar hinzufügt. Anscheinend werden sie nicht für den gleichen Zweck verwendet, aber was ist der Unterschied (ich habe auch Google überprüft, aber fand keine Antwort darauf)?HTTP: difference Request Property und POST - Parameter

Antwort

1

setRequestProperty() verwendet wird, HTTP-Header setzen (wie Content-Type):

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

Aber POST-Parameter Sie URL-Codierung müssen setzen sie und schreiben Sie die resultierende Zeichenfolge (auf Byte-Strom umgewandelt) an die OutputStream erhalten von HttpURLConnection Instanz.

Zum Beispiel a mit Wert 1 und b mit Wert 2 als POST-Parameter zu senden, können Sie folgendes tun können:

final String urlEncodedString = "a=1&b=2"; 
final byte[] bytesToWrite = urlEncodedString.getBytes(StandardCharsets.UTF_8); 
conn.getOutputStream().write(bytesToWrite); 

Hier conn ist eine Instanz HttpURLConnection.

+0

Danke, das ist alles, was ich wissen wollte :) – Doflaminhgo

1

Sie verwenden eine zu alte Methode, um eine Anfrage an den Server zu stellen. Versuchen Sie, eine Bibliothek zu verwenden, die viele unnötige Codes wie Laden in den Pufferleser und Konvertierungsprozess reduziert. Stattdessen empfehle ich Ihnen, die volley-Bibliothek zu verwenden. Lesen Sie dazu die Google-Dokumentation. Sie können ein benutzerdefiniertes JSONObjectReuqest erstellen und die getParams-Methode überschreiben, oder Sie können sie im Konstruktor als JSONObject bereitstellen, das in den Hauptteil der Anforderung eingefügt wird.

Like this (I bearbeitet Code):

JSONObject obj = new JSONObject(); 
 
obj.put("key", "value"); 
 
obj.put("key2", "value2"); 
 
// add whatever you want 
 

 
RequestQueue queue = MyVolley.getRequestQueue(); 
 
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,SPHERE_URL,obj, 
 
    new Response.Listener<JSONObject>() { 
 
     @Override 
 
     public void onResponse(JSONObject response) { 
 
      System.out.println(response); 
 
      hideProgressDialog(); 
 
     } 
 
    }, 
 
    new Response.ErrorListener() { 
 
     @Override 
 
     public void onErrorResponse(VolleyError error) { 
 
      hideProgressDialog(); 
 
     } 
 
    }); 
 
queue.add(jsObjRequest);

+0

i bereits über die Volley-Bibliothek lesen, aber im Interesse Ich wollte es altmodisch machen. danke für deinen Vorschlag :) – Doflaminhgo