sus*_*dlh 10 java android firebase retrofit2
请任何人请帮忙.这是我的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"}}
请帮忙................
在firebase中,当您发布POST时,您试图推送到POST的URL下存储的数据列表.因此,无法POST到/user/new.json,也不能将数据存储在/ user/new下新的firebase生成的密钥(如"-KBgcQTomo8xGpnv5raM")下.
如果要完全控制放置数据的位置,则必须使用PUT.但是,将您的新条目直接设置为/ user/new是没有意义的.后续条目将在哪里?
如果您不接受服务器端密钥分配,那么通常的解决方案是使用您将强制执行唯一性的条目的某些部分.例如,名称或数字ID可以是新用户的密钥,以便可以添加多个用户.
基于改造API并使用name作为唯一键,这:
@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"}}}
因此,只要他们没有被命名为Sam,就可以添加未来的用户.
Retrofit发布数据.有在Firebase中保存数据的方法.您是否知道Firebase在后台管理所有内容.
我不知道你为什么要使用Retrofit发布数据.
要自动发送和更新的代码段.
public class User {
    private int birthYear;
    private String fullName;
    public User() {}
    public User(String fullName, int birthYear) {
        this.fullName = fullName;
        this.birthYear = birthYear;
    }
    public long getBirthYear() {
        return birthYear;
    }
    public String getFullName() {
        return fullName;
    }
}
Firebase alanRef = ref.child("users").child("alanisawesome");
User alan = new User("Alan Turing", 1912);
alanRef.setValue(alan);
您还可以将数据直接保存到数据库位置:
//在父节点alansRef.child("fullName")上使用.child()引用子节点.setValue("Alan Turing"); alansRef.child( "birthYear")的setValue(1912).
它会保存你想要的:
{
  "users": {
    "alanisawesome": {
      "birthYear": "1912",
      "fullName": "Alan Turing"
    }
  }
}
请按照文档:在Firebase中保存数据
谢谢.
小智 3
正如 @sushildlh 所说,在这种情况下并不值得使用改造(如果我们正在考虑请求发送/响应计时器),但这是很好的 Android 编程实践。我确信您仍然应该使用改造。
但这不是重点。您的问题出在 firebase 上的 API 中。使用您想要获取的响应创建您自己的 json 文件并将其上传到 firebase。
干杯
| 归档时间: | 
 | 
| 查看次数: | 6922 次 | 
| 最近记录: |