Проверка пользовательских данных с помощью Firebase записывает данные в android studio - PullRequest
0 голосов
/ 28 марта 2020

Я разрабатываю android приложение для голосования. У меня есть этот код, который вставляет электронные письма избирателей в ключ кандидатов, чтобы помочь мне подсчитать общее количество голосов.

public static void insertvote(String userkey, String categ, String candId, String uid) {
            DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
            DatabaseReference totalVotesRef = rootRef.child("votes").child(categ).child(candId);
            Vote vote = new Vote(userkey);
            totalVotesRef.child(uid).setValue(vote.getVoterEmail());

Это приводит к приведенным ниже результатам в базе данных:

Firebase database

Как мне принудительно настроить электронную почту для голосовать только один раз, и если он существует в указанной категории c, он запрещает повторное голосование? (Например, на изображении выше, hr@gmail.com был указан дважды вместо одного, что означает, что они могут голосовать за президента дважды) Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Простое решение, под каждым профилем избирателя, добавьте поле boolean:.

Если кто-то провел голосование, просто пометьте его как True.

Используйте if else для проверьте это, получив значение hasVoted под избирателем.

Если пользователю разрешено голосовать за разные события, вы можете сделать логическое значение, используя идентификатор события, предполагая, что вы разработали хорошо структурированную программу, в которой все имеют идентификатор. Например, Brexit UK имеет идентификатор 123456789, поле будет называться hasVoted123456789. Всегда запрашивайте field, когда пользователь заходит на страницу.

P / s: Фрэнк представил более чистый подход, используя в своем предыдущем посте .

0 голосов
/ 28 марта 2020

Я НЕ ФИРМЕННЫЙ ЭКСПЕРТ , но я думаю, что запрос загрузит все данные для всех голосов.

ЕСЛИ Я НЕ НЕПРАВИЛЬНО запрашиваю все голосов, которые могут быть миллионами, а затем совпадение адреса электронной почты и категории может быть излишним. Я думаю, что вы можете создать плоскую структуру для категорий и поместить каждую категорию под нее, и когда избиратель голосует, поместите свой идентификатор под эту категорию.

like   cartegories :|
                |
                | president|
                |          |id:jrlkjew34234tlk 
                |          |id:rwjelk343243tjlke 
                |          |id:rjlwekr343ljlerer
                |          |
                | prime minister|
                |               |id:iorlue4324uoirew
                |               |id:eri34o3ljlewo234

Теперь, когда каждый раз, когда голоса ставят свой идентификатор под категорию, он пытается проголосовать и запросить только эту категорию и просто найти идентификатор.

Что-то в этом роде

public void vote(Voter voter){
    mDatabase.child("categories").child(voter.getCategory()) //getCategory() returns 
    //string that you will put under categories node, like pm , president etc
    .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot snapShot : dataSnapshot.getChildren()){
                if(snapShot.getValue(String.class).equals(voter.getVoterId))
                   // if you get here he can't vote otherwise he can
          }   
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

Таким образом, вы будете запрашивать определенную категорию голосов, следовательно, быстрый ответ и меньше загрузки и меньше счета, и вы можете пропустить поле категории из голосования, потому что вы сможете подсчитать голос по новой структуре

НЕКОТОРЫЕ, ПОЖАЛУЙСТА, ИСПРАВИТЕ МЕНЯ, ЕСЛИ Я НЕПРАВИЛЬНО

И ОП, скажите, пожалуйста, в чем причина сохранения единственной категории для члена, если участник может голосовать более чем за одну категорию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...