Регистрация пользователя с проблемой URI - PullRequest
0 голосов
/ 13 января 2019

так что это сложный вопрос для меня, потому что проблема мне не ясна. Logcat просто быстро выплевывает строки и строки ошибок без четкого объяснения того, что не так.

Я пытался сделать так, чтобы при регистрации пользователя аватар по умолчанию добавлялся в его учетную запись, но по какой-то причине, когда я добавляю URI по умолчанию в учетные записи, регистрация завершается неудачно. Приложение не аварийно завершает работу, и учетная запись создается, но пользователь неправильно добавлен в мою базу данных Firebase, и пользователю не отправляется электронное письмо для аутентификации.

Итак, чтобы создать этот аватар по умолчанию, я загрузил изображение в хранилище Firebase и преобразовал URL-адрес изображения в URI, выполнив это

public Uri defaultAvatar = Uri.parse("https://firebasestorage.googleapis.com/v0/b/fifty-fifty-1314c.appspot.com/o/defaultavatarmale.png?alt=media&token=def5ee33-6664-4344-bfca-27e4b284df00");

И затем, когда пользователь нажимает «зарегистрироваться», его учетная запись создается и должна быть добавлена ​​в базу данных с помощью этой строки

User users = new User(username, email, defaultAvatar, wins, losses, balance, null, 0, false);

Всякий раз, когда точка, в которой указано defaultAvatar, является нулевой, регистрация учетной записи работает отлично, но всякий раз, когда я изменяю ее на этот URI, происходит сбой. Это весь метод, который регистрирует пользователя

    firebaseAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                sendVerificationEmail();
                //start profile activity here

                User users = new User(username, email, defaultAvatar, wins, losses, balance, null, 0, false);
                FirebaseDatabase.getInstance().getReference("Users")
                        .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                        .setValue(users)
                        .addOnCompleteListener
                                (new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
                                        Toast.makeText(RegisterActivity.this, "A verification link has been sent to your email.", Toast.LENGTH_SHORT).show();
                                        startActivity(new Intent(RegisterActivity.this, LoginActivity.class));
                                        overridePendingTransition(R.anim.slide_left, R.anim.slide_right);
                                } else {
                                    Toast.makeText(RegisterActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                                    progressDialog.hide();
                                }
                            }
                        });
            } else {
                Toast.makeText(RegisterActivity.this, "Registration not successful, please try again.", Toast.LENGTH_SHORT).show();
                progressDialog.hide();
            }
        }
    });

И строка, которая дает мне ошибку:

.setValue(users)

Мой logcat, который должен помочь мне в этой ситуации, - это просто беспорядок, когда кто-то пытается зарегистрироваться. Я попытался отфильтровать вещи в нем, чтобы найти конкретную ошибку, но, похоже, ничего не работает. В Logcat столько всего, что строки в верхней части сразу начинают исчезать, поэтому я не вижу исходную ошибку. Если кто-то может помочь мне сузить проблему в моем logcat, это тоже будет оценено!

Я бы показал, что говорит мой logcat, но я не думаю, что в данный момент это полезно.

2019-01-12 15:30:57.949 3149-3149/com.example.brent.fifty_fifty E/AndroidRuntime:     at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(com.google.firebase:firebase-database@@16.0.5:663)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:167)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(com.google.firebase:firebase-database@@16.0.5:47)

Класс пользователя:

package com.example.brent.fifty_fifty;

import android.net.Uri;

import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.StorageTask;

public class User {

HomePage hp;
private String email;
private String userName;
private String uid;
private String gameId;
private String currentGameID;
private int position;

private boolean ready, inGame;

private String HorT;
private int wins, losses, score;
private double balance;

private Uri profileImage;

public User() {

}

public User(String userName, int score, String HorT, String uid, String gameId, int position, boolean ready, boolean inGame) {
    this.uid = uid;
    this.userName = userName;
    this.score = score;
    this.HorT = HorT;
    this.gameId = gameId;
    this.ready = ready;
    this.position = position;
    this.inGame = inGame;
}

public User(String userName, String email, Uri profileImage, int wins, int losses, double balance, String currentGameID, int position, boolean inGame) {
    this.userName = userName;
    this.email = email;
    this.wins = wins;
    this.losses = losses;
    this.balance = balance;
    this.currentGameID = currentGameID;
    this.position = position;
    this.inGame = inGame;
    this.profileImage = profileImage;
}


public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public int getWins() {
    return wins;
}

public void setWins(int wins) {
    this.wins = wins;
}

public int getLosses() {
    return losses;
}

public void setLosses(int losses) {
    this.losses = losses;
}

public double getBalance() {
    return balance;
}

public void setBalance(double balance) {
    this.balance = balance;
}


public String getHorT() {
    return HorT;
}

public void setHorT(String horT) {
    HorT = horT;
}

public String getUid() {
    uid = hp.uid;
    return uid;
}


public String getGameId() {
    return gameId;
}

public void setGameId(String gameId) {
    this.gameId = gameId;
}


public String getCurrentGameID() {
    return currentGameID;
}

public void setCurrentGameID(String currentGameID) {
    this.currentGameID = currentGameID;
}


public boolean isReady() {
    return ready;
}

public void setReady(boolean ready) {
    this.ready = ready;
}

public boolean inGame() {
    return inGame;
}

public void inGame(boolean inGame) {
    this.inGame = inGame;
}

public int getPosition() {
    return position;
}

public void setPosition(int position) {
    this.position = position;
}


public Uri getProfileImage() {
    return profileImage;
}

public void setProfileImage(Uri profileImage) {
    this.profileImage = profileImage;
}

}

1 Ответ

0 голосов
/ 13 января 2019

SDK базы данных реального времени не очень хорошо работает с объектом Uri. Он пытается выполнить сложную сериализацию всех своих данных, предоставляемых всеми методами получения. Вместо этого вы должны указать тип поля аватара, чтобы он был просто строкой, потому что это все, что вы действительно хотите сохранить. Либо так, либо создайте Карту всех полей, которые вы хотите сериализовать, и убедитесь, что у них есть простые типы данных, которые вы хотите сохранить для пользователя.

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