Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android Retrofit | Publicar objeto personalizado (enviar json al servidor)

Me preguntaba cómo podría ir sobre enviar un objeto de encargo a mi API usando retrofit, algo como esto:

@POST(URL_ORDERS) public void newOrder(Order order, Callback<Boolean> success); 

Aquí es cómo lo analizaría en mi servidor

 public function store() { if(Auth::check()){ $order = Input::get(); $table = $order->table; $items = $order->items; if(!$table->taken){ $table->taken = true; $order->push(); $table->push(); return true; } } return false; } 

Por alguna razón estoy recibiendo

 06-04 20:45:59.275 6085-6306/com.tesis.restapp.restapp W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x40aae210) 06-04 20:45:59.285 6085-6306/com.tesis.restapp.restapp E/AndroidRuntime﹕ FATAL EXCEPTION: Retrofit-Idle java.lang.IllegalArgumentException: RestAppApiInterface.newOrder: No Retrofit annotation found. (parameter #1) at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:120) at retrofit.RestMethodInfo.parameterError(RestMethodInfo.java:124) at retrofit.RestMethodInfo.parseParameters(RestMethodInfo.java:443) at retrofit.RestMethodInfo.init(RestMethodInfo.java:131) 

Supongo que lo que quiero es hacer de alguna manera transformar mi objeto en un json y enviarlo a mi servidor. ¿Me estoy acercando a esto de la manera correcta?

  • Android: Obtener respuesta de una URL https
  • Android: UnknownHostException
  • Uso de Android para enviar a un formulario de hoja de cálculo de Google
  • Enviar solicitud de publicación con params utilizando Retrofit
  • ¿Cómo puedo enviar JSon como BODY en una solicitud POST al servidor desde una aplicación de Android?
  • Android httpPost con parámetros y archivo
  • POSTando JSON / XML usando android-async-http (loopj)
  • Envío de archivos mediante POST con HttpURLConnection
  • One Solution collect form web for “Android Retrofit | Publicar objeto personalizado (enviar json al servidor)”

    El error es no proporcionar la anotación @Body en el parámetro Order . Cambiarlo a:

     @POST(URL_ORDERS) public void newOrder(@Body Order order, Callback<Boolean> success); 

    Retrofit utiliza Gson para serializar y deserializar JSON de forma predeterminada. Gson utiliza nombres de variable por defecto para la serialización, pero se pueden cambiar usando la anotación @SerializedName("replacement_name") .

    Por ejemplo, si su clase de Order ve así:

     public class Order { @SerializedName("custom_id") private int id; private String name; private List<Item> items; } public class Item { private int id; private String name; } 

    Entonces Gson serializaría automáticamente eso para

     { "custom_id": 1, "name": "Hello Object", "items": [ { "id": 1, "name": "Hello Item" } ] } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.