0

我想獲取經緯度和所有設備的數據,如6430046874,6430046875,6430046876將數據保存在模型類或Firebase列表中

enter image description here

new GetDataFromFirebase().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 


    FirebaseDatabase database = FirebaseDatabase.getInstance(); 

    myRef = database.getReference("GPSLocationHistory/DevicesLatest/6430046874"); 


    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      Map<String, Object> objectHashMap = dataSnapshot.getValue(objectsGTypeInd); 
      ArrayList<Object> objectArrayList = new ArrayList<Object>(objectHashMap.values()); 
      System.out.println("value 0= " + objectArrayList.get(0) + " value 1= " + objectArrayList.get(1) + "value 2= " + objectArrayList.get(2) + " value 3= " + objectArrayList.get(3) + "value 4= " + objectArrayList.get(4) + " value 5= " + objectArrayList.get(5) + " value 6= " + objectArrayList.get(6)); 
      // LatLng location = new LatLng(latitude, longitude); 
      String latLng = objectArrayList.get(2).toString() + "," + objectArrayList.get(3).toString(); 
      System.out.print("oyy " + latLng); 
      Toast.makeText(MapsActivity.this,""+latLng.toString(),Toast.LENGTH_SHORT).show(); 

      latlongFcm = new LatLng(Double.parseDouble(objectArrayList.get(2).toString()), Double.parseDouble(objectArrayList.get(3).toString())); 
      mMap.clear(); 
      Marker marker; 
      marker = mMap.addMarker(new MarkerOptions() 
        .position(latlongFcm) 
        .title("San Francisco") 
        .snippet("Population: 776733")); 


      for (DataSnapshot alert : dataSnapshot.getChildren()) { 
       System.out.println(alert.getValue()); 
      } 


     } 

該代碼會顯示一個用戶的唯一數據,如6430046874

我要讓模型類,並從這裏所有的用戶獲取數據並繪製了標記。

回答

2

步驟1)使其中包含了所有在DeviceLatest子節點具有相似的數據類型

第2步的關鍵一PoJo.class)到所需的子節點在你這裏的情況是GpsLocationHistory-DeviceLatest。所以在這裏我們必須採取兩個時間的孩子..請糾正子節點的拼寫

步驟3)寫下方法和調用。

public void getAllUsersFromFirebase() { 
    DatabaseReference UserRef = FirebaseDatabase.getInstance().getReference().child("GpsLocationHistory").child("DeviceLatest"); 
    UserRef.keepSynced(true); 
    UserRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Iterator<DataSnapshot> dataSnapshots = dataSnapshot.getChildren().iterator(); 
      List<PoJo> fcmUsers = new ArrayList<>(); 
      while (dataSnapshots.hasNext()) { 
       DataSnapshot dataSnapshotChild = dataSnapshots.next(); 
       PoJo fcmUser = dataSnapshotChild.getValue(PoJo.class); 
       fcmUsers.add(fcmUser); 

      } 

      // Check your arraylist size and pass to list view like 
      if(fcmUsers.size()>0) 
      { 
       fcmUsers arraylist pass to list view 
      }else 
      { 
       // Display dialog for there is no user available. 
      } 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
       // for handling database error   
     } 
    }); 
} 
+1

由於工作完美 但我想所有的設備緯度,分別經度地圖 情節標記有什麼我可以做的就是從列表 – Ahmad

+0

數據上面的方法,我們給你所有的設備細節不是個別的,所以讓你的PoJo.class所有的鍵。 – ashish

0

因爲您沒有遍歷整個對象,所以只有一個。因此,爲了解決這個問題,請使用此代碼:

FirebaseDatabase database = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference myRef = database.child("GPSLocationHistory").child("DevicesLatest"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String deviceId = (String) ds.getKey(); 

      DatabaseReference deviceIdRef = database.child("GPSLocationHistory").child("DevicesLatest").child(deviceId); 
      ValueEventListener eventListener = new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        Double lati = (Double) dataSnapshot.child(lati).getValue(); 
        Double longi = (Double) dataSnapshot.child(longi).getValue(); 
        //and so on for the other values 
        //and do what you want with this values 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        throw databaseError.toException(); // don't ignore errors 
       } 
      }; 
      deviceIdRef.addListenerForSingleValueEvent(eventListener); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     throw databaseError.toException(); // don't ignore errors 
    } 
}; 
myRef.addListenerForSingleValueEvent(eventListener); 
相關問題