2017-05-05 49 views
2

我正在使用Firebase。我想檢查我的應用程序的重複數據。目前我讓用戶輸入姓名和電子郵件。但是,如果用戶第二次輸入相同的名稱和電子郵件,它也會被添加到數據庫中。 如何解決這個 這裏是我的代碼:如何檢查Firebase中的重複數據

package com.example.zaid_pc.mpd2; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 

public class tournament extends AppCompatActivity { 

private EditText etTournament; 
private EditText emailTournament; 
private DatabaseReference mDatabaseRefernce; 
Button btnTournament; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_tournament); 

etTournament = (EditText)findViewById(R.id.etTournament); 
emailTournament = (EditText)findViewById(R.id.emailTournament); 
btnTournament = (Button)findViewById(R.id.btnTournament); 

mDatabaseRefernce = FirebaseDatabase.getInstance().getReference().child("People Registered"); 

btnTournament.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 



    final String name = etTournament.getText().toString().trim(); 
    final String email = emailTournament.getText().toString().trim(); 

    //mDatabaseRefernce.child("Name").setValue(name); 
    //mDatabaseRefernce.child("Email").setValue(email); 



final DatabaseReference peopleRegisered = mDatabaseRefernce.push(); 
peopleRegisered.child("Name").setValue(name); 
peopleRegisered.child("Email").setValue(email); 



Toast.makeText(tournament.this, "You will be notified via email", Toast.LENGTH_LONG).show(); 

finish(); 




     } 
    }); 


} 

}

+0

的[火力地堡的android:使用戶名唯一]可能的複製(http://stackoverflow.com/questions/35243492/firebase-android-make-username-unique) – faruk

+0

發佈火力地堡數據庫結構 – Lingeshwaran

回答

0

之前將數據推送到數據庫首先與數據庫或檢查是否存在數據不

檢查用戶名是從現有的或不以下代碼

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 
Query query = reference.child("issue").orderByChild("id").equalTo(0); 
query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.exists()) { 
      // dataSnapshot is the "issue" node with all children with id 0 
      for (DataSnapshot issue : dataSnapshot.getChildren()) { 
       // do something with the individual "issues" 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

修改根據您的需要

對裁判 Firebase querying data

0

爲了解決這個問題,我recomand您使用每個用戶的唯一標識符此代碼。該標識符可以是由push()方法,uidemail address生成的唯一ID。我建議你最後的選擇。由於火力地堡不會在關鍵的接受像.一個符號,你需要econde的電子郵件地址是這樣的:

[email protected] - >名@電子郵件,COM

要實現這一點,這裏有2個方法,將幫助你encodedecode的電子郵件地址。

private String encodeUserEmail(String userEmail) { 
    return userEmail.replace(".", ","); 
} 

private String decodeUserEmail(String userEmail) { 
    return userEmail.replace(",", "."); 
} 

假設你的數據庫結構看起來像這樣:

root 
| 
--- users 
     | 
     --- [email protected],com 
       | 
       --- uid: 4362454274745 
       | 
       --- name: John 

用戶是否存在使用下面的代碼,你可以驗證:

DatabaseReference userEmailRef = FirebaseDatabase.getInstance().getReference().child("users").child(userEmail); 
    ValueEventListener valueEventListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.exists()) { 
       Log.d("TAG", "Users exists!"); 
      } else { 
       //Create user 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) {} 
    }; 
    userEmailRef.addListenerForSingleValueEvent(valueEventListener); 

在這userEmail是編碼的電子郵件用戶。

希望它有幫助。

0

我已經弄明白如下代碼 您需要在此處添加單個值偵聽器,並檢查您想要在表中搜索的數據是否存在。

mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(final DataSnapshot dataSnapshot) { 
       for (DataSnapshot data : dataSnapshot.getChildren()) { 
       //If email exists then toast shows else store the data on new key 
        if (!data.getValue(User.class).getEmail().equals(email)) { 
         mFirebaseDatabase.child(mFirebaseDatabase.push().getKey()).setValue(new User(name, email)); 
        } else { 
         Toast.makeText(ChatListActivity.this, "E-mail already exists.", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 

      @Override 
      public void onCancelled(final DatabaseError databaseError) { 
      } 
     });