Firebase Auth выдает указатель времени ожидания 1 при запуске на физическом устройстве, но работает на эмуляторе Android (Firebase работает только на эмуляторе)

#java #android #firebase

# #java #Android #firebase

Вопрос:

ОБНОВЛЕНИЕ: Любой проект, использующий firebase, работает только на эмуляторе, я пробовал.
ПРИЛОЖЕНИЕ РАБОТАЕТ ПО НАЗНАЧЕНИЮ ТОЛЬКО В ЭМУЛЯТОРЕ

Когда я тестирую приложение на физическом устройстве, я получаю следующее. [Скриншот вывода LogCat][1]

Это вывод LogCat каждый раз, когда я нажимаю свою кнопку входа
в систему, вот мой MainActivity.java файл

 package com.abg.logintest;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.auth.AuthResu<
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private FirebaseAuth mAuth;
    TextInputEditText email,pass;
    String emailText,password;
    Button login;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAuth = FirebaseAuth.getInstance();
        email = findViewById(R.id.email);
        pass = findViewById(R.id.pass);

        login = findViewById(R.id.button);
        login.setOnClickListener(this);
    }

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    private void loginUser(String email, String password){
        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d("TAG", "signInWithEmail:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w("TAG", "signInWithEmail:failure", task.getException());
                            Toast.makeText(MainActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                            updateUI(null);
                        }

                        // ...
                    }
                });
    }

    private void updateUI(FirebaseUser currentUser) {
        if(currentUser!=null)
        Log.d("login",currentUser.getEmail());
    }

    @Override
    public void onClick(View v) {
        emailText = email.getText().toString();
        password = pass.getText().toString();
        loginUser(emailText,password);
    }
}
 

Вот основная деятельность XML

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="email"
        android:padding="10dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.265">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@ id/email">

        </com.google.android.material.textfield.TextInputEditText>
    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:id="@ id/textInputLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@ id/pass"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </com.google.android.material.textfield.TextInputEditText>
    </com.google.android.material.textfield.TextInputLayout>

    <Button
        android:id="@ id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@ id/textInputLayout" />

</androidx.constraintlayout.widget.ConstraintLayout>
 

Я включил все зависимости, необходимые для запуска firebase

[Мои зависимости на уровне модуля: ПРИЛОЖЕНИЕ][2]

[Разрешения, которые я упомянул в своем файле манифеста] [3]
Буду признателен за любую помощь, спасибо. [1]: https://i.stack.imgur.com/u8XY8.png [2]: https://i.stack.imgur.com/lIm6a.png [3]: https://i.stack.imgur.com/5kBVy.png

Ответ №1:

Итак, после изучения всего кода я обнаружил, что «new OnCompleteListener()» был выделен серым цветом, а среда IDE предложила «Анонимный новый OnCompleteListener() можно заменить на lambda»,
поэтому я заменил его на lambda
, и, что удивительно, приложение теперь работает и на реальном устройстве.

ПЕРЕД ЛЯМБДОЙ

  mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {....
 

ПОСЛЕ ЛЯМБДА-выражения

  mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, task -> {...
 

Хотя я все еще не понимаю, почему в одном проекте «new OnCompleteListener …» не был выделен серым цветом и работал нормально, но в другом проекте его нужно было заменить на лямбда-функцию.

и теперь возникает вопрос, почему приложение отлично работает на эмуляторе независимо от наличия функций lambda, и ему нужна lambda для работы на реальном устройстве.