POSTING JSON / XML usando android-async-http (loopj)

Sto usando android-async-http e mi piace molto. Ho eseguito un problema con i dati di POSTing. Devo submit i dati all'API nel seguente formato: –

<request> <notes>Test api support</notes> <hours>3</hours> <project_id type="integer">3</project_id> <task_id type="integer">14</task_id> <spent_at type="date">Tue, 17 Oct 2006</spent_at> </request> 

Come per la documentazione, ho provato a farlo usando RequestParams , ma non funziona. È questo qualsiasi altro modo per farlo? Posso anche POST equivalente JSON. Qualche idea?

  • Android - Librerie NDK estrarre i ganci JNI pertinenti con nm / objdump
  • Lost la mia libreria per l'applicazione caricata sul mercato android
  • Android che utilizza wifimanager per connettersi alla networking protetta WPA-PSK
  • Come passare il parametro a un webservice usando ksoap2?
  • La nuova libreria di supporto delle preferenze non è corretto durante il runtime
  • Come mostrare la window di dialogo di localizzazione di abilitazione come Google Maps?
  • Firebase / Android - Carica Utente da UID
  • Aggiornamento da Cordova 2.5 a Cordova 3.0, affrontando problemi durante l'utilizzo di CordovaInterface
  • Cambiare l'impostazione della luce di segnalazione a impulsi / trackball su Android (solo Nexus One)
  • Android, telefonate la trasmissione audio via wlan
  • Qualsiasi modo per supportre la galassia ss4 utilizzando le size dello schermo compatibile
  • Imansible get ScrollView per scorrere quando viene visualizzata la tastiera soft
  • 9 Solutions collect form web for “POSTING JSON / XML usando android-async-http (loopj)”

    Esempi Loopj POST – estesi dal loro esempio Twitter:

     private static AsyncHttpClient client = new AsyncHttpClient(); 

    Per submit normalmente tramite RequestParams :

     RequestParams params = new RequestParams(); params.put("notes", "Test api support"); client.post(restApiUrl, params, responseHandler); 

    Per pubblicare JSON:

     JSONObject jsonParams = new JSONObject(); jsonParams.put("notes", "Test api support"); StringEntity entity = new StringEntity(jsonParams.toString()); client.post(context, restApiUrl, entity, "application/json", responseHandler); 

    @Timothy risposta non ha funzionato per me.

    Ho definito il Content-Type di Content-Type della StringEntity per farlo funzionare:

     JSONObject jsonParams = new JSONObject(); jsonParams.put("notes", "Test api support"); StringEntity entity = new StringEntity(jsonParams.toString()); entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); client.post(context, restApiUrl, entity, "application/json", responseHandler); 

    In bocca al lupo 🙂

    un modo migliore per pubblicare json

     RequestParams params = new RequestParams(); params.put("id", propertyID); params.put("lt", newPoint.latitude); params.put("lg", newPoint.longitude); params.setUseJsonStreamer(true); ScaanRestClient restClient = new ScaanRestClient(getApplicationContext()); restClient.post("/api-builtin/properties/v1.0/edit/location/", params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { } }); 

    Per pubblicare XML

     protected void makePost() { AsyncHttpClient client = new AsyncHttpClient(); Context context = this.getApplicationContext(); String url = URL_String; String xml = XML-String; HttpEntity entity; try { entity = new StringEntity(xml, "UTF-8"); } catch (IllegalArgumentException e) { Log.d("HTTP", "StringEntity: IllegalArgumentException"); return; } catch (UnsupportedEncodingException e) { Log.d("HTTP", "StringEntity: UnsupportedEncodingException"); return; } String contentType = "string/xml;UTF-8"; Log.d("HTTP", "Post..."); client.post( context, url, entity, contentType, new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { Log.d("HTTP", "onSuccess: " + response); } ... other handlers }); } 

    basta scrivere il tuo xml o json in una string e submit al server, con le intestazioni corrette o senza. e sì impostare "Content-Type" in "application / json"

    Se qualcuno ha un problema che httpclient invia come tipo di Content-Type: text/plain , consulta questo link: https://stackoverflow.com/a/26425401/361100

    Il httpclient loopj è leggermente modificato (o ha un problema) che non può ignorare il StringEntity contenuto nativo di StringEntity per l' application/json .

    È ansible aggiungere la string JSON come un InputStream di qualche tipo – ho usato il ByteArrayStream, quindi passandolo alla RequestParams devi impostare il correctMimeType

     InputStream stream = new ByteArrayInputStream(jsonParams.toString().getBytes(Charset.forName("UTF-8"))); multiPartEntity.put("model", stream, "parameters", Constants.MIME_TYPE_JSON); 

    Basta fare JSONObject e convertirlo in String "someData" e submit semplicemente con "ByteArrayEntity"

      private static AsyncHttpClient client = new AsyncHttpClient(); String someData; ByteArrayEntity be = new ByteArrayEntity(someData.toString().getBytes()); client.post(context, url, be, "application/json", responseHandler); 

    Sta funzionando bene per me.

    Per submit il file xml a un server php:

     public class MainActivity extends AppCompatActivity { /** * Send xml file to server via asynchttpclient lib */ Button button; String url = "http://xxx/index.php"; String filePath = Environment.getExternalStorageDirectory()+"/Download/testUpload.xml"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { postFile(); } }); } public void postFile(){ Log.i("xml","Sending... "); RequestParams params = new RequestParams(); try { params.put("key",new File(filePath)); }catch (FileNotFoundException e){ e.printStackTrace(); } AsyncHttpClient client = new AsyncHttpClient(); client.post(url, params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes) { Log.i("xml","StatusCode : "+i); } @Override public void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) { Log.i("xml","Sending failed"); } @Override public void onProgress(long bytesWritten, long totalSize) { Log.i("xml","Progress : "+bytesWritten); } }); } 

    }

    Dopo l'aggiunta di android-async-http-1.4.9.jar allo studio android, vai a build.gradle e aggiungi: compile 'com.loopj.android:android-async-http:1.4.9' in dependencies

    E su AndroidManifest.xml aggiungere:

    <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.