请任何人请帮忙.这是我的API方法
@POST("/user/new.json") Call createUser(@Body User user);
这是我在MainActivity中的电话
Retrofit retrofit=new Retrofit.Builder().baseUrl("https://XXXXXX.firebaseio.com").addConverterFactory(GsonConverterFactory.create()).build(); Api api=retrofit.create(Api.class); User user=new User(1,"Sam"); Call<User> call=api.createUser(user); call.enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call,Response<User> response) { Log.d("sam","run"); } @Override public void onFailure(Call<User> call,Throwable t) { Log.d("sam","error"); } });
这是User.java
public class User { int id; String name; public User(int id,String name) { this.id = id; this.name = name; } }
输出是这样的: –
"user" : {"new" : {"-KBgcQTomo8xGpnv5raM" : {"id" : 1,"name" : "Sam"}}}
但我想要输出: –
"user" : {"new" : {"id" : 1,"name" : "Sam"}}
这是Retrofit + Firebase的教程
请帮忙…………….
解决方法
在firebase中,当您
POST尝试推送到POST的URL下存储的
list of data时.因此,不可能对/user/new.json进行POST操作,并且不会将数据存储在新的firebase生成的键下,如/ user / new下面的“-KBgcQTomo8xGpnv5raM”.
如果你想完全控制你在哪里放置数据,你必须使用PUT.然而,把你的新条目直接作为/ user / new是没有道理的.随后的条目将在哪里?
如果您不接受服务器端密钥分配,则正常的解决方案将是使用您将强制执行唯一性的条目的一部分.例如,名称或数字id可能是新用户的密钥,以便可以添加多个用户.
基于改装API并使用名称作为唯一键,这是:
@POST("/user/new.json") Call createUser(@Body User user);
会成为:
@PUT("/user/new/{name}.json") Call createUser(@Path("name") String name,@Body User user);
和:
Call<User> call=api.createUser(user);
那将是:
Call<User> call=api.createUser(user.name,user);
现在的布局是:
"user" : {"new" : {"Sam": {"id" : 1,"name" : "Sam"}}}