2016-07-28 18 views
0

私はfirebaseを初めて使いました。Firebase - データベースの不整合データがAndroidのデータベースに保存されています

approot{ 
uid{ 
name:"name" 
add:"add" 
phn:"phn" 
} 
uid2{ 
name:"name" 
add:"add" 
phn:"phn" 
} 
....... 

など:私は、与えられたフォーマットでFirebase、データベース内のいくつかのデータを格納しようとしています。このため 私は、次のコードを書かれている:

String phn = inputPhn.getText().toString().trim(); 
     String add = inputAdd.getText().toString().trim(); 
     String name = inputName.getText().toString().trim(); 

     if (TextUtils.isEmpty(name)) { 
      Toast.makeText(getApplicationContext(), "Enter name!", Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     if (TextUtils.isEmpty(phn)||phn.length()!=10) { 
      Toast.makeText(getApplicationContext(), "Enter phone no.!", Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     if (TextUtils.isEmpty(add)) { 
      Toast.makeText(getApplicationContext(), "Enter address!", Toast.LENGTH_SHORT).show(); 
      return; 
     } 
     //String info="Name:"+name+"\n"+"PhoneNo:"+phn+"\n"+"Adress:"+add+"\n"; 
     String uId=auth.getCurrentUser().getUid(); 
     myref.child(uId).child("name").setValue(name); 
     myref.child(uId).child("add").setValue(add); 
     myref.child(uId).child("phone").setValue(phn); 
     myref.child(uId).child("end").setValue("end"); 
     auth.signOut(); 

私の問題は、私は一貫性firebase、データベース内のデータの格納取得していますということです。データベースに保存されているデータは次のとおりです。

{ 
    "User" : { 
    "ANj8GLEJS9alW11QYQyF8Rykwyn2" : { 
     "add" : "hzjs", 
     "name" : "hxjx" 
    }, 
    "b0ZBftQ5UOOtTtzkeZHcC0558MC3" : { 
     "add" : "gw", 
     "name" : "hs" 
    }, 
    "eH6rCXzvEncTe163N7KaJ7XEZp52" : { 
     "name" : "dudj" 
    }, 
    "gEqc92Z0mvcfIWvhZu7QOhRcnNQ2" : { 
     "add" : "bsus", 
     "name" : "jziz", 
     "phone" : "1234567890" 
    }, 
    "kGF2PalHrpeFus6682z55p47YBg2" : { 
     "add" : "hdud", 
     "name" : "jdhd" 
    }, 
    "nHRt5n5roGfU3QogVUM09HDBrIw2" : { 
     "add" : "qwerty", 
     "end" : "end", 
     "name" : "q", 
     "phone" : "1234567860" 
    }, 
    "pRRzexjQN1eynoCQcoClNl2TcHk2" : { 
     "add" : "dvjh", 
     "name" : "rhid" 
    }, 
    "vaek3Z4eEVTWmc722T92tfgBwaE3" : { 
     "add" : "dhudvj", 
     "name" : "gsbud" 
    }, 
    "xsH5JoTXftaxicUmvntt0N5hcNJ3" : { 
     "add" : "zhs", 
     "name" : "q" 
    } 
    } 
} 

私を助けてください。
編集
私はfirebase 9.2.1を使用しています。 と定義されたルールは以下のとおりです。 -

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null" 
    } 
} 
+0

は、形式[CompletionListener(https://firebase.google.com/docs/reference/android/com/を使用し、setValueの 'の呼び出しは()'失敗している理由を理解しますgoogle/firebase/database/DatabaseReference.CompletionListener)、 'DatabaseError'の値を確認してください。バージョン9.2.1を使用して結果を再現することはできません。どのバージョンを使用していますか?すべての書き込みを許可するようにデータベースのセキュリティルールを設定していますか? –

+0

@qbix質問に追加された質問とルールを編集しました。 –

+0

あなたの 'uId'は自動生成されるか、カスタム' uId'ですか? – triandicAnt

答えて

2

認証が正常に呼び出されsignOut後にnullになりますので、あなたは、ユーザーをサインアウトする前に、終了するsetValueのを待つ必要があります。 setValueが終了していない場合は、authがnullであるため、ルールに違反します。

CompletionListenerを使用してsetValueが完了していることを確認してから、安全にユーザーをログアウトできます。このよう

Map<String, String> values = new HashMap<>(); 
values.put("name", name); 
values.put("add", add); 
values.put("phone", phn); 
values.put("end", end); 

DatabaseReference.CompletionListener completionListener = new DatabaseReference.CompletionListener() { 
    @Override 
    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { 
     auth.signOut(); 
    } 
}; 
myref.child(uid).setValue(values, completionListener); 
関連する問題