安卓改造 |发布自定义对象(将 json 发送到服务器)
Posted
技术标签:
【中文标题】安卓改造 |发布自定义对象(将 json 发送到服务器)【英文标题】:Android Retrofit | Post custom object (send json to server) 【发布时间】:2014-07-25 19:28:41 【问题描述】:我想知道如何使用改造将自定义对象发送到我的 API,如下所示:
@POST(URL_ORDERS)
public void newOrder(Order order, Callback<Boolean> success);
这是我在服务器上解析它的方式
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;
由于某种原因,我得到了
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)
我想我想要它做的是以某种方式将我的对象转换为 json 并将其发送到我的服务器。我是否以正确的方式处理这个问题?
【问题讨论】:
【参考方案1】:错误是由于没有在 Order
参数上提供 @Body
注释。改成:
@POST(URL_ORDERS)
public void newOrder(@Body Order order, Callback<Boolean> success);
Retrofit 默认使用Gson 序列化和反序列化 JSON。 Gson 默认使用变量名进行序列化,但可以使用注解@SerializedName("replacement_name")
更改它们。
例如,如果您的 Order
类看起来像这样:
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;
然后 Gson 会自动将其序列化为
"custom_id": 1,
"name": "Hello Object",
"items": [
"id": 1,
"name": "Hello Item"
]
【讨论】:
对! :) 这就是我的想法。我不知道为什么会出现错误:/(我的 Order 类看起来几乎和你写的一样) 如果要发送 List以上是关于安卓改造 |发布自定义对象(将 json 发送到服务器)的主要内容,如果未能解决你的问题,请参考以下文章
单击一行后,Extjs 4 网格自定义添加一个带有文本字段的面板