【问题标题】:How can I add more parameters in Android Firebase database post?如何在 Android Firebase 数据库帖子中添加更多参数?
【发布时间】:2023-03-14 17:42:01
【问题描述】:

我目前正在使用 Firebase github example 创建一个用户注册并可以发布“状态更新”的应用。我能够正确地做到这一点,但现在我想添加更多参数,比如用户位置(纬度和经度),但我不确定我会把它放在哪里。我不确定在什么时候添加要添加的所有内容。这是我当前的代码:

NewPostActivity:

private DatabaseReference mDatabase;

private EditText mTextField;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new_post);

    mDatabase = FirebaseDatabase.getInstance().getReference();

    mTextField = (EditText) findViewById(R.id.postText);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabSubmitPost);
    assert fab != null;
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            submitPost();
        }
    });
}

private void submitPost() {
    final String text = mTextField.getText().toString();

    if (TextUtils.isEmpty(text)) {
        mTextField.setError("Required");
        return;
    }

    final String userId = getUid();
    mDatabase.child("users").child(userId).addListenerForSingleValueEvent new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);

            if (user == null) {
                Toast.makeText(NewPostActivity.this, "Could not fetch user", Toast.LENGTH_SHORT).show();
            } else {
                writeNewPost(userId, user.username, text);
            }
            finish();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(NewPostActivity.this, databaseError.toString(), Toast.LENGTH_SHORT).show();
        }
    });
}

private void writeNewPost(String userId, String username, String text) {
    String key = mDatabase.child("posts").push().getKey();
    Post post = new Post(userId, username, text);
    Map<String, Object> postValues = post.toMap();

    Map<String, Object> childUpdates = new HashMap<>();
    childUpdates.put("/posts/" + key, postValues);
    childUpdates.put("/user-posts/" + userId + key, postValues);

    mDatabase.updateChildren(childUpdates);
}

这是帖子文件:

public class Post {

    public String uid;
    public String author;
    public String text;
    public int likeCount = 0;
    public Map<String, Boolean> likes = new HashMap<>();

    public Post() {

    }

    public Post(String uid, String author, String text) {
        this.uid = uid;
        this.author = author;
        this.text = text;
    }

    @Exclude
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("uid", uid);
        result.put("author", author);
        result.put("text", text);
        result.put("likeCount", likeCount);
        result.put("likes", likes);

        return result;
    }
}

【问题讨论】:

  • 您想在哪里拥有latitude and longitudepost 以及其他参数?
  • @SatyenUdeshi 是的,我相信那会是最好的?你不觉得吗?
  • 当然可以,但最近取决于您的用例:) 发布答案,看看是否有帮助
  • @SatyenUdeshi 好吧,我想发布一个带有位置的新帖子。如果我再次靠近那个位置,我希望能够看到它,如果不是,我不想看到它。太好了,谢谢!!

标签: java android firebase firebase-realtime-database


【解决方案1】:

为了在保存Post 时添加Latitude &amp; Longitude,您可以将这两个参数添加到现有类中,您需要修改Post 类构造函数以添加另外两个参数,例如:

public double lat,lng;

public Post(String uid, String author, String text,double lat,double lng) {
    this.uid = uid;
    this.author = author;
    this.text = text;
    this.lat = lat;
    this.lng = lng;
}

然后在您的toMap 函数中,您可以将参数添加到result,例如:

result.put("lat", lat);
result.put("lng", lng);

因此,当您在 writeNewPost 函数中调用构造函数时,您可以更改这一行:

Post post = new Post(userId, username, text);

Post post = new Post(userId, username, text, lat, lng);

现在您的新帖子将连同经纬度一起发布

我假设你已经有了经纬度

更新

如果您想查看已发布在 Location 中的 Posts,您可以执行以下操作,

在您查询postsFirebase query 中,您可以添加orderByChildequalTofilter 以与当前的latitude &amp; Longitude 进行比较,

如果你想根据距离过滤它们,那么你必须查询所有posts,然后在本地比较它们

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 2014-12-15
    • 1970-01-01
    • 2022-10-18
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多