2016-10-25 7 views
0

私はFirebaseを初めて使用しており、Androidアプリケーションに実装しようとしています。それまではすべてうまくいっていた。私はそれらを挿入する前に重複のためのレコードをチェックしなければならないと私はそれを把握することはできませんチュートリアルのトンの後にも私はオンラインを見た。Firebaseに挿入する前に重複を確認してください

私はルールを試しましたが、明らかに私は彼らがうまくいく方法でそれらを書き込むことができませんでした。私はpush()で試しましたが、これもうまくいきませんでした。現時点で

これは私が持っているコードです:何が起こることは講義詳細がある場合ということで今のところ

{ 
    "rules": { 
    ".read": "true", 
    ".write": "auth != null", 
     "course-of-student": { 
     "year": { 
      "workshop-group": { 
      "day":{    
       "time": { 
       ".write": "!data.exists()" 
       }    
      } 
      } 
     } 
     } 
    } 
} 

private void updateDatabase(String year, String courseOfStudent, String workshopGroup, String day, String time, String lecture){ 
    try{ 
     mDatabase.child("student-timetables").child("course-of-student").setValue(courseOfStudent); 
     mDatabase.child("student-timetables").child(courseOfStudent).child("year").setValue(year); 
     mDatabase.child("student-timetables").child(courseOfStudent).child(year).child("workshop-group").setValue(workshopGroup); 
     mDatabase.child("student-timetables").child(courseOfStudent).child(year).child(workshopGroup).child("day").setValue(day); 
     mDatabase.child("student-timetables").child(courseOfStudent).child(year).child(workshopGroup).child(day).child("time").setValue(time); 
     mDatabase.child("student-timetables").child(courseOfStudent).child(year).child(workshopGroup).child(day).child(time).child("lecture").setValue(lecture);} 
    catch (Exception e) 
    { 
     Toast.makeText(getContext(), "Internal error occurred, please try again.", Toast.LENGTH_LONG).show(); 
    } 
} 

そしてFirebaseコンソールからルール特定の時間に、私は以前のものが上書きされるこの時間のために新しいレコードを作成しようとします。私はこれを拒否し、代わりにメッセージを表示したいと思います。

どこが間違っていますか?例えば

答えて

2

まず、 "ListenerForSingleValueEvent" を追加し、その後にのみFirebaseにデータを保存する(存在しない場合は...) :

mDatabase.child("student-timetables").child(courseOfStudent).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
    if(!(snapshot.child("year").exist)) 
    mDatabase.child("student-timetables").child(courseOfStudent).child("year").setValue(year); 
    else 
    Toast.maketext....."year exist.." 

    if(!(snapshot.child(year).child("workshop-group").exist)) 
    mDatabase.child("student-timetables").child(courseOfStudent).child(year).child("workshop-group").setValue(workshopGroup); 
    else 
    Toast.maketext....."workshopGroup exist.." 
    } 
} 
+1

あなたが、先生は、一日保存しました! – Phantomazi

+0

@Phantomaziこの解決策は競合状態になりがちです。スナップショットは 'if(...) 'でチェックしているときには存在しないかもしれないが作成することができます'.setValue()'で値を設定する直前ではなく前に設定します。 –

関連する問題