簡體   English   中英

如何從 Firebase 實時數據庫中檢索具有 UID 的特定用戶的特定數據

[英]How to retrieve specific data of a specific user with UID from a Firebase realtime database

我是 Java 編碼的新手。 目前,我正在嘗試從我的 firebase 實時數據庫中獲取“特定”數據。 就我而言,我想使用 UserID 來獲取 HostID 中的緯度和經度。 但是,我無法獲取來自不同帳戶的數據。 我對我的問題做了一些研究。 當我使用 UserID 時,我仍然不知道如何獲取 HostID 中的緯度和經度。

以下是我將數據存儲到數據庫的方式。

 private void saveDatatoDatabase(Location location) { String latitude = String.valueOf(location.getLatitude()); String longitude = String.valueOf(location.getLongitude()); //Access to database rootNode = FirebaseDatabase.getInstance(); reference = rootNode.getReference("HostID"); //Get the lat and log to the database TrackingIDClass IDclass = new TrackingIDClass(latitude, longitude); reference.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("TrackingID").child("ID").setValue(IDclass); }

這是我的數據庫數據。

來自實時數據庫的數據

這是我使用相同主機帳戶檢索數據的方法。

 @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; //LatLng sydney = new LatLng(-34,151); // LatLng lastLocationPlaced = sydney; DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("HostID").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("TrackingID").child("ID"); ValueEventListener listener = databaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { String latitude = dataSnapshot.child("latitude").getValue(String.class); String longitude = dataSnapshot.child("longitude").getValue(String.class); Double Latitude = Double.parseDouble(latitude); Double Longitude = Double.parseDouble(longitude); LatLng latLng = new LatLng (Latitude,Longitude); MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(latLng); markerOptions.title("Lat:" + Latitude+" Lon:" + Longitude); mMap.addMarker(markerOptions); //lastLocationPlaced = latLng; mMap.animateCamera((CameraUpdateFactory.newLatLngZoom(latLng,12.0f))); } @Override public void onCancelled(@NonNull DatabaseError error) { } }); }

現在,當我使用 UserID 帳戶時,我在獲取緯度的過程中遇到了問題。 我真的不確定如何從這里開始,我看不到 go 前進的方法。 請指教。 非常感謝。

更新!!!

現在我在搜索 TrackingID 的方式上做了一些更改。

 private void isTrackingID() { String userTrackingID = enterTracking.getText().toString().trim(); //Long userTrackingIDNumber = Long.parseLong(userTrackingID); Toast.makeText(this, "testing = " + userTrackingID, Toast.LENGTH_SHORT).show(); DatabaseReference reference = FirebaseDatabase.getInstance().getReference("HostID").child(firebaseAuth.getUid()); Query query = reference.orderByChild("TrackingID/ID").equalTo(userTrackingID); query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { Log.i("checking", "this is value message"); enterTracking.setError(null); String IDfromDatabase = dataSnapshot.child(userTrackingID).getValue(String.class); for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren()) { String Latitudevalue = String.valueOf(dataSnapshot1.child("latitude").getValue()); Log.i("testing for lol", Latitudevalue); String Longitudevalue = String.valueOf(dataSnapshot1.child("longitude").getValue()); Log.i("testing for latitude", Longitudevalue); String latitudefromDatabase = dataSnapshot1.child("latitude").getValue(String.class); String longitudefromDatabase = dataSnapshot1.child("longitude").getValue(String.class); Double Latitude = Double.parseDouble(latitudefromDatabase); Double Longitude = Double.parseDouble(longitudefromDatabase); Intent intent = new Intent(Latitude_Longitude.this, MapsActivity.class); intent.putExtra("latitude", Latitude); intent.putExtra("longitude", Longitude); startActivity(intent); } }else { enterTracking.setError("Invalid Tracking ID from database"); enterTracking.requestFocus(); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { Log.d("error", databaseError.getMessage()); } }); }

添加這些代碼后,logcat 一直顯示“W/PersistentConnection: pc_0 - 使用未指定的索引。您的數據將在客戶端下載和過濾。考慮在 HostID/q6jJMcxtTxMkxiktl6K4eDBSrRP2 添加 '".indexOn": "TrackingID/ID"'為了您的安全和 Firebase 數據庫規則以獲得更好的性能”和來自 Edittext 的 output 一直說“來自數據庫的無效跟蹤 ID。” 不知道哪里錯了。。。

您將需要通過某種邏輯查找用戶的 UID,可能使用基於位置Order by Child的查詢。

如果您已經知道用戶的 UID,則可以在典型的讀取方法中使用它,但需要安全規則允許任何用戶讀取任何其他用戶的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM