2017-03-03 42 views
0

我是一名經驗豐富的MySQL用戶,但我是json和firebase的新手。我試圖做一個用戶可以輸入數據的活動,並將其保存到我的數據庫的Firebase中。我達到了我的目標,但這是問題所在。當我保存它(我想)我需要指定一個字符串的子元素。由於此子元素是靜態的,因此每次用戶輸入問題時都會覆蓋數據庫中現有的問題。我該如何解決這個問題,以及如何獲取數據?這是我的代碼的一部分。每次用戶在Firebase中按下按鈕時如何存儲數據(Android)

private FirebaseAuth firebaseAuth; 
    private DatabaseReference databaseReference; 


firebaseAuth=FirebaseAuth.getInstance(); 
     if(firebaseAuth.getCurrentUser()==null){ 
      finish(); 
      startActivity(new Intent(this,LoginActivity.class)); 
     } 
     FirebaseUser user=firebaseAuth.getCurrentUser(); 
     databaseReference= FirebaseDatabase.getInstance().getReference(); 


Info info=new Info(question,answer,a,b,c,d); 
       databaseReference.child("secondQuestion").setValue(info); 
//info is a new object which takes 6 string as an input. 
    // As you can see, I declare a string inside .child and it overwrites the data stored in it 
+1

您可能希望將問題存儲在類似列表的結構中:https://firebase.google.com/docs/database/android/lists-of-data。使用'push'會爲您的問題生成一個唯一的ID,您可能需要將其保存到某處以供稍後檢索。 –

回答

0

安德魯評論說,這的確是正常的項目添加到使用push一(半按時間順序)列表。

它們在邏輯上與MySQL中的自動增量字段類似,但是具有(非常)不同的格式。請參閱this post about why Firebase doesn't use the +1 style incrementsthis post on the push IDs

如果你的問題已經有一個唯一標識它們的屬性,你應該使用它作爲關鍵。因此,假設您正在存儲Firebase身份驗證用戶列表,則應將每個用戶存儲在uid之下。或者如果問題文本必須是唯一的,那麼您應該將每個問題存儲在其文本的哈希衍生物下。

+0

我明白了。所以我可以做類似以下的事情嗎?每當用戶嘗試輸入一個新問題時,我想檢查我的數據庫中的每個密鑰以查看它是否與上一個問題重複。因爲如果我不這樣做,並且我試圖將問題添加到db,我認爲它會覆蓋上一個問題,而不是拒絕添加新問題 – Freshia

+0

鍵自動唯一。另一方面,值不是。您可以輕鬆防止在安全規則中覆蓋數據:'「.write」:「!data.exists()」 –

相關問題