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

Estoy usando android-async-http y realmente me gusta. Me he topado con un problema con POSTing data. Tengo que publicar los datos en la API en el siguiente 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> 

Según la documentación, he intentado hacerlo usando RequestParams , pero está fallando. ¿Es esta otra forma de hacerlo? Puedo POST JSON equivalente también. ¿Algunas ideas?

9 Solutions collect form web for “POSTando JSON / XML usando android-async-http (loopj)”

Ejemplos de POST de Loopj – ampliado desde su ejemplo de Twitter:

 private static AsyncHttpClient client = new AsyncHttpClient(); 

Para publicar normalmente a través de RequestParams :

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

Para publicar 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 respuesta no funcionó para mí.

StringEntity el Content-Type de StringEntity para que funcione:

 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); 

Buena suerte 🙂

Una mejor manera de publicar 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) { } }); 

Publicar 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 }); } 

Sólo tiene que escribir su xml o json a una cadena y enviar al servidor, con encabezados adecuados o sin. Y sí establecer "Content-Type" a "application / json"

Si alguien tiene un problema que httpclient envía como Content-Type: text/plain , consulte este enlace: https://stackoverflow.com/a/26425401/361100

El httpclient loopj está algo cambiado (o tiene un problema) que no puede invalidar StringEntity nativo Content-Type a application/json .

Usted puede agregar la cadena de JSON como un InputStream de una cierta clase – He utilizado el ByteArrayStream, después pasarlo a los RequestParams usted debe fijar el correctMimeType

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

Basta con hacer JSONObject y luego convertirlo en String "someData" y simplemente enviar 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); 

Está funcionando bien para mí.

Para publicar un archivo xml en un servidor 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); } }); } 

}

Después de añadir android-async-http-1.4.9.jar a android studio, vaya a build.gradle y agregue: compile 'com.loopj.android:android-async-http:1.4.9' bajo dependencias

Y en AndroidManifest.xml agregar:

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

  • Spring MVC, Thymeleaf y REST
  • Análisis de la cadena JSON de la URL (RESTful webservice) mediante las bibliotecas GSON. Androide
  • Jquery ajax llamada dentro de Phonegap a RESTful API
  • ¿Qué es una manera fácil de stub / dummy un servicio web relajante?
  • Error java.lang.RuntimeException: Stub! En Android con pruebas de Fitnesse
  • ¿Cómo puedo eliminar la clave nameValuePairs del JSONObject?
  • Android: subir imagen a Twitter utilizando REST API y Fabric, error de tubería roto
  • Uso del correo y la contraseña para autenticarse mediante la API REST
  • POST cuerpo JSON utilizando Retrofit
  • Android IllegalStateException: No se pudo ejecutar el método de la actividad
  • Excepción de host no resuelta en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.