微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 使用Firebase进行改装

请任何人请帮忙.这是我的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"}}}

所以未来的用户只要不被命名为Sam就可以添加.

原文地址:https://www.jb51.cc/java/123805.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐