我在使用Firebase數據庫時將DataSnapshot
投射到我的Model類時出現問題。將Firebase,DataSnapshot轉換爲Model類
我收到信息作爲DataSnapshot,並且當我將它設置爲toString()並記錄它時,我在數據庫中看到正確的信息(值)。但是,當我嘗試將其轉換爲我的模型類我看到我的默認(零個值)
參考
E /查詢getRef():https://開頭****** ** /用戶/ pZl7xHxREefHZu3Zgd7ZZBSJTmA2 /活動
DataSnapshot.toString()
E /查詢DATAS:DataSnapshot {鍵=活動,值= {29May201720:11:16 = {,elapsedTime = 0,currentTime的= 170529201116,(...), myLocationsList = {(...)} //信息
//在當前時刻鑄造模型數據之後最後的數據
E /查詢GETVAL():ResourcesFromActivity {averageSpeed = 0.0,MAXSPEED = 0.0,averageStrokeRate = 0.0,totalMeters = 0} //歸零默認
- 在單個節點它的工作
usersActivitiesRef = database.getReference( 「消息」); usersActivitiesRef.addValueEventListener(this);
代碼:在的onCreate():
(mAuth.getCurrentUser() == null) {
mAuth.getCurrentUser().reload();
}
else{
mUser = FirebaseAuth.getInstance().getCurrentUser();
usersActivitiesRef = database.getReference("users").child(mUser.getUid()).child("activities");//.endAt(true).limitToLast(1);
// usersActivitiesRef = database.getReference("message");
Query query = usersActivitiesRef.orderByChild("currentTime").limitToLast(1);
Log.e("Query getRef()",query.getRef().toString());
//usersActivitiesRef.addValueEventListener(this);
query.addValueEventListener(this);
}
上的數據變化
@Override
public void onDataChange(DataSnapshot dataSnapshot){
ResourcesFromActivity receivedData = dataSnapshot.getValue(ResourcesFromActivity.class);
Log.e("Query Ref",dataSnapshot.getRef().toString());
Log.e("Query DataS","\n "+dataSnapshot.toString());
Log.e("Query getVal()","\n "+ receivedData.toString());
Log.e("Query","\n "+ Long.toString(receivedData.getTotalMeters()));
allLocations = receivedData.getMyLocationsList();
(...)
型號:
@IgnoreExtraProperties
public class ResourcesFromActivity {
public String currentTime;
public long elapsedTime;
public String elapsedTimeStr;
public float averageSpeed;
public float maxSpeed;
public float averageStrokeRate;
public long totalMeters;
public List<MyLocation> myLocationsList = new ArrayList<>();
public List<Location> allLocations = new ArrayList<>();
public List<Float> allStrokes = new ArrayList<>();
public ResourcesFromActivity(){
// Default constructor required for calls to DataSnapshot.getValue(ResourcesFromActivity.class)
}
public ResourcesFromActivity(String currentTime, long elapsedTime, String elapsedTimeStr, float averageSpeed, float maxSpeed, float averageStrokeRate, long totalMeters, List<MyLocation> myLocationsList, List<Location> allLocations, List<Float> allStrokes) {
this.currentTime = currentTime;
this.elapsedTime = elapsedTime;
this.elapsedTimeStr = elapsedTimeStr;
this.averageSpeed = averageSpeed;
this.maxSpeed = maxSpeed;
this.averageStrokeRate = averageStrokeRate;
this.totalMeters = totalMeters;
this.myLocationsList = myLocationsList;
this.allLocations = allLocations;
this.allStrokes = allStrokes;
}
也許我做錯了什麼事與索引
{
"rules": {
"users": {
"$uid": {
".read": "true",
".write": "$uid === auth.uid",
"$userId" :{
"activities":{
"$activitieId": {
".read": "true",
".indexOn": ["currentTime"]
}
}
}
},
}
}
}
謝謝
我可以看到你的變量是私人的。你是否爲他們創建了getter和setter?你有一個公共構造函數將所有變量作爲參數嗎? –
我修正了私有變量,但沒有更改,{我使用了alt + Insert並且默認是私有的,} –
創建一個構造函數,將這些變量作爲參數。公衆獲得者和制定者。 –