Как исправить мое приложение, чтобы войти, используя идентификатор и пароль онлайн с помощью Firebase - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок в Android Studio. Посмотрев видео, я сделал это приложение для входа в свое приложение, используя идентификатор и пароль, хранящиеся в Firebase. Все, на мой взгляд, в порядке, но когда я запускаю приложение и ввожу идентификатор и пароль (даже правильный), оно вызовет sh.

Я проверил все, но проблема все еще остается. Я сфотографировал Logcat и загрузил сюда.

Это основная активность:

public class MainActivity extends AppCompatActivity {

    EditText edtUsername, edtPassword;
    Button btnSignIn;
    DatabaseReference databaseReference;


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

        edtUsername=(EditText)findViewById(R.id.edtUsername);
        edtPassword=(EditText)findViewById(R.id.edtPassword);
        btnSignIn=(Button) findViewById(R.id.btnSignIn);

        databaseReference= FirebaseDatabase.getInstance().getReference("Students");

        btnSignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                logIn(edtUsername.getText().toString(),edtPassword.getText().toString());
            }
        });
    }

    private void logIn(final String id, final String password) {

        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.child(id).exists()){

                    if (!id.isEmpty()){
                        User user=dataSnapshot.child(id).getValue(User.class);
                        if (user.getPassword().equals(password)){
                            Toast.makeText(MainActivity.this, "Successful Login", Toast.LENGTH_SHORT).show();
                        }else{
                            Toast.makeText(MainActivity.this, "Incorrect Password", Toast.LENGTH_SHORT).show();
                        }
                    }else{
                        Toast.makeText(MainActivity.this, "User is Not Registered", Toast.LENGTH_SHORT).show();
                    }
                }else{
                    Toast.makeText(MainActivity.this, "User is Not Registered", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

Это страница User.class:

public class User {

    private String id;
    private String password;

    public String getId() {

        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPassword() {

        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public User() {
    }
}

и это результат журнала :

Logcat result

1 Ответ

0 голосов
/ 21 апреля 2020

Ваш User.class определяет пароль как String , тогда как в базе данных он хранится как Long .

User user=dataSnapshot.child(id).getValue(User.class);

РЕШЕНИЕ

Просто измените свой файл User.class на:

public class User {

  private String id;
  private Long password;

  public String getId() {
    return "" + id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getPassword() {
    return password.toString();
  }

  public void setPassword(Long password) {
    this.password = password;
  }

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