0

Я делаю экран входа для своего приложения, в итоге у меня два активити, одна просто для входа, другая для регистрации, проблема в том что при нажатии на кнопки приложение сразу же закрывается и все, в чем может быть проблема?

Вот код: Экран входа:

package com.example.afec;

import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.TextView;

import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.material.snackbar.Snackbar; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase;

public class MainActivityEntrance extends AppCompatActivity implements View.OnClickListener {

// Обьявление об использовании следующих обьектов:
Button button_create;
TextView textForgot;
Button button_enter;
FirebaseAuth auth;
FirebaseDatabase db;
DatabaseReference users;
EditText editEntranceTextTextEmailAddress;
EditText editEntranceTextTextPassword3;
RelativeLayout root;


@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_entrance);

    button_create = findViewById(R.id.button_create);
    button_create.setOnClickListener(this);
    textForgot = findViewById(R.id.textForgot);
    textForgot.setOnClickListener(this);

    button_enter = findViewById(R.id.button_enter);
    auth = FirebaseAuth.getInstance();
    db = FirebaseDatabase.getInstance();
    users = db.getReference("Users");
}

@Override
public void onClick(View v) {
    if (TextUtils.isEmpty(editEntranceTextTextEmailAddress.getText().toString())) {
        Snackbar.make(root, "Введите вашу почту", Snackbar.LENGTH_SHORT).show();
        return;
    }
    if (editEntranceTextTextPassword3.getText().toString().length() < 5) {
        Snackbar.make(root, "Короткий пороль, введите болешь 5 символов", Snackbar.LENGTH_SHORT).show();
        return;
    }
    auth.signInWithEmailAndPassword(editEntranceTextTextEmailAddress.getText().toString(), editEntranceTextTextPassword3.getText().toString())
            .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                    startActivity(new Intent(MainActivityEntrance.this, MainActivityForgotPassword.class));
                    finish();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Snackbar.make(root, "Ошибка авторизации. " + e.getMessage(), Snackbar.LENGTH_SHORT).show();
                }
            });


}

}

Экран регистрации

package com.example.afec;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout;

import com.example.afec.Models.User; import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.material.snackbar.Snackbar; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase;

import java.util.Objects;

public class MainActivityCreateAccount extends AppCompatActivity implements View.OnClickListener { Button button_create_account; FirebaseAuth auth; FirebaseDatabase db; DatabaseReference users; EditText editCreateAccountTextTextEmailAddress; EditText editCreateAccountTextTextPassword3; RelativeLayout root;

@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_create_account);

    button_create_account = findViewById(R.id.button_create_account);
    button_create_account.setOnClickListener(this);
    auth = FirebaseAuth.getInstance();
    db = FirebaseDatabase.getInstance();
    users = db.getReference("Users");
    editCreateAccountTextTextEmailAddress = findViewById(R.id.editEntranceTextTextEmailAddress);
    editCreateAccountTextTextPassword3 = findViewById(R.id.editEntranceTextTextPassword3);
    root = findViewById(R.id.root_element);


}

@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View v) {
    if (TextUtils.isEmpty(editCreateAccountTextTextEmailAddress.getText().toString())) {
        Snackbar.make(root, "Введите вашу почту", Snackbar.LENGTH_SHORT).show();
        return;
    }
    if (editCreateAccountTextTextPassword3.getText().toString().length() < 5) {
        Snackbar.make(root, "Короткий пороль, введите болешь 5 символов", Snackbar.LENGTH_SHORT).show();
        return;
    }

    // Регистрация
    auth.createUserWithEmailAndPassword(editCreateAccountTextTextEmailAddress.getText().toString(), editCreateAccountTextTextPassword3.getText().toString())
    .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
        @Override
        public void onSuccess(AuthResult authResult) {
            User user = new User();
            user.setEditCreateAccountTextTextEmailAddress(editCreateAccountTextTextEmailAddress.getText().toString());
            user.setEditCreateAccountTextTextPassword3(editCreateAccountTextTextPassword3.getText().toString());

            users.child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid())
                    .setValue(user)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void unused) {
                    Snackbar.make(root, "Успешная регистрация", Snackbar.LENGTH_SHORT).show();
                }
            });
        }
    });
}

}

XML регистрации

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".MainActivityCreateAccount"
    android:background="@color/grey">
&lt;ImageView
    android:id=&quot;@+id/Logo&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;236dp&quot;
    android:layout_marginStart=&quot;88dp&quot;
    android:layout_marginTop=&quot;85dp&quot;
    android:layout_marginEnd=&quot;88dp&quot;
    android:foregroundGravity=&quot;center&quot;
    android:contentDescription=&quot;@string/icon&quot;
    app:layout_constraintBottom_toTopOf=&quot;@id/editCreateAccountTextTextEmailAddress&quot;
    app:layout_constraintEnd_toEndOf=&quot;parent&quot;
    app:layout_constraintHorizontal_bias=&quot;0.478&quot;
    app:layout_constraintStart_toStartOf=&quot;parent&quot;
    app:layout_constraintTop_toTopOf=&quot;parent&quot;
    app:layout_constraintVertical_bias=&quot;0.0&quot;
    app:srcCompat=&quot;@mipmap/ic_logo_foreground&quot;
    tools:ignore=&quot;ImageContrastCheck,ImageContrastCheck&quot; /&gt;

&lt;!-- Это текс отвечающий за информирование для создания аккаунта --&gt;
&lt;TextView
    android:id=&quot;@+id/textCreateAccount&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@id/Logo&quot;
    android:layout_marginHorizontal=&quot;139dp&quot;
    android:gravity=&quot;center&quot;
    android:layout_marginTop=&quot;10dp&quot;
    android:text=&quot;@string/createText&quot;
    android:textColor=&quot;@color/black&quot;
    android:textSize=&quot;15sp&quot;
    tools:ignore=&quot;MissingConstraints&quot; /&gt;

&lt;EditText
    android:id=&quot;@+id/editCreateAccountTextTextEmailAddress&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:foregroundGravity=&quot;center&quot;
    android:layout_below=&quot;@id/textCreateAccount&quot;
    android:layout_marginStart=&quot;88dp&quot;
    android:layout_marginTop=&quot;10dp&quot;
    android:layout_marginEnd=&quot;88dp&quot;
    android:background=&quot;@drawable/edit_text_style&quot;
    android:ems=&quot;10&quot;
    android:hint=&quot;@string/Username_hint&quot;
    android:inputType=&quot;textEmailAddress&quot;
    android:paddingLeft=&quot;10dp&quot;
    android:paddingTop=&quot;10dp&quot;
    android:paddingRight=&quot;10dp&quot;
    android:paddingBottom=&quot;10dp&quot;
    android:textColor=&quot;@android:color/black&quot;
    app:layout_constraintHorizontal_bias=&quot;0.485&quot;
    tools:ignore=&quot;MissingConstraints,TouchTargetSizeCheck&quot;
    android:importantForAutofill=&quot;no&quot; /&gt;

&lt;EditText
    android:id=&quot;@+id/editCreateAccountTextTextPassword3&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@id/editCreateAccountTextTextEmailAddress&quot;
    android:layout_marginStart=&quot;88dp&quot;
    android:layout_marginTop=&quot;8dp&quot;
    android:layout_marginEnd=&quot;88dp&quot;
    android:layout_marginBottom=&quot;4dp&quot;
    android:background=&quot;@drawable/edit_text_style&quot;
    android:ems=&quot;10&quot;
    android:hint=&quot;@string/Password_hint&quot;
    android:inputType=&quot;textPassword&quot;
    android:paddingLeft=&quot;10dp&quot;
    android:paddingTop=&quot;10dp&quot;
    android:paddingRight=&quot;10dp&quot;
    android:paddingBottom=&quot;10dp&quot;
    android:textColor=&quot;@android:color/black&quot;
    app:layout_constraintBottom_toTopOf=&quot;@+id/button_create_account&quot;
    app:layout_constraintEnd_toEndOf=&quot;parent&quot;
    app:layout_constraintHorizontal_bias=&quot;0.571&quot;
    app:layout_constraintStart_toStartOf=&quot;parent&quot;
    tools:ignore=&quot;TouchTargetSizeCheck&quot;
    android:importantForAutofill=&quot;no&quot; /&gt;

&lt;Button
    android:id=&quot;@+id/button_create_account&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@id/editCreateAccountTextTextPassword3&quot;
    android:layout_marginStart=&quot;88dp&quot;
    android:layout_marginEnd=&quot;88dp&quot;
    android:backgroundTint=&quot;@color/green&quot;
    android:text=&quot;@string/create_on_account_button&quot;
    android:textColor=&quot;@color/white&quot;
    android:textSize=&quot;14sp&quot;
    app:layout_constraintEnd_toEndOf=&quot;parent&quot;
    app:layout_constraintHorizontal_bias=&quot;0.571&quot;
    app:layout_constraintStart_toStartOf=&quot;parent&quot;
    tools:ignore=&quot;MissingConstraints,TextContrastCheck,TouchTargetSizeCheck&quot; /&gt;

</RelativeLayout>

XML входа

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".MainActivityEntrance"
    android:background="@color/grey"
    android:id="@+id/root_element">
&lt;!-- Снизу это Иконка --&gt;

&lt;ImageView
    android:id=&quot;@+id/Logo&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;236dp&quot;
    android:layout_marginStart=&quot;88dp&quot;
    android:layout_marginTop=&quot;85dp&quot;
    android:layout_marginEnd=&quot;88dp&quot;
    android:contentDescription=&quot;@string/icon&quot;
    app:layout_constraintBottom_toTopOf=&quot;@+id/editEntranceTextTextEmailAddress&quot;
    app:layout_constraintEnd_toEndOf=&quot;parent&quot;
    app:layout_constraintHorizontal_bias=&quot;0.478&quot;
    app:layout_constraintStart_toStartOf=&quot;parent&quot;
    app:layout_constraintTop_toTopOf=&quot;parent&quot;
    app:layout_constraintVertical_bias=&quot;0.0&quot;
    app:srcCompat=&quot;@mipmap/ic_logo_foreground&quot;
    tools:ignore=&quot;ImageContrastCheck,ImageContrastCheck&quot; /&gt;

&lt;!-- Снизу это поле для ввода электронной почты для входа --&gt;
&lt;EditText
    android:id=&quot;@+id/editEntranceTextTextEmailAddress&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@+id/Logo&quot;
    android:layout_marginStart=&quot;88dp&quot;
    android:layout_marginTop=&quot;18dp&quot;
    android:layout_marginEnd=&quot;88dp&quot;
    android:background=&quot;@drawable/edit_text_style&quot;
    android:ems=&quot;10&quot;
    android:hint=&quot;@string/Username_hint&quot;
    android:inputType=&quot;textEmailAddress&quot;
    android:paddingLeft=&quot;10dp&quot;
    android:paddingTop=&quot;10dp&quot;
    android:paddingRight=&quot;10dp&quot;
    android:paddingBottom=&quot;10dp&quot;
    android:textColor=&quot;@android:color/black&quot;
    app:layout_constraintBottom_toTopOf=&quot;@+id/editEntranceTextTextPassword3&quot;
    app:layout_constraintEnd_toEndOf=&quot;@+id/Logo&quot;
    app:layout_constraintHorizontal_bias=&quot;0.485&quot;
    app:layout_constraintStart_toStartOf=&quot;@+id/Logo&quot;
    app:layout_constraintTop_toBottomOf=&quot;@+id/Logo&quot;
    tools:ignore=&quot;TouchTargetSizeCheck&quot;
    android:importantForAutofill=&quot;no&quot; /&gt;

&lt;!-- Снизу это поле для ввода пороля для входа --&gt;
&lt;EditText
    android:id=&quot;@+id/editEntranceTextTextPassword3&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@+id/editEntranceTextTextEmailAddress&quot;
    android:layout_marginStart=&quot;88dp&quot;
    android:layout_marginTop=&quot;8dp&quot;
    android:layout_marginEnd=&quot;88dp&quot;
    android:layout_marginBottom=&quot;4dp&quot;
    android:background=&quot;@drawable/edit_text_style&quot;
    android:ems=&quot;10&quot;
    android:hint=&quot;@string/Password_hint&quot;
    android:inputType=&quot;textPassword&quot;
    android:paddingLeft=&quot;10dp&quot;
    android:paddingTop=&quot;10dp&quot;
    android:paddingRight=&quot;10dp&quot;
    android:paddingBottom=&quot;10dp&quot;
    android:textColor=&quot;@android:color/black&quot;
    app:layout_constraintBottom_toTopOf=&quot;@+id/button_enter&quot;
    app:layout_constraintEnd_toEndOf=&quot;parent&quot;
    app:layout_constraintHorizontal_bias=&quot;0.571&quot;
    app:layout_constraintStart_toStartOf=&quot;parent&quot;
    app:layout_constraintTop_toBottomOf=&quot;@+id/editEntranceTextTextEmailAddress&quot;
    tools:ignore=&quot;TouchTargetSizeCheck&quot;
    android:importantForAutofill=&quot;no&quot; /&gt;

&lt;!-- Это кнопка отвечающая за вход в приложения --&gt;
&lt;Button
    android:id=&quot;@+id/button_enter&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@+id/editEntranceTextTextPassword3&quot;
    android:layout_marginStart=&quot;88dp&quot;
    android:layout_marginEnd=&quot;88dp&quot;
    android:backgroundTint=&quot;@color/green&quot;
    android:text=&quot;@string/login_hint&quot;
    android:textColor=&quot;@color/white&quot;
    android:textSize=&quot;14sp&quot;
    app:layout_constraintBottom_toTopOf=&quot;@id/textForgot&quot;
    app:layout_constraintEnd_toEndOf=&quot;parent&quot;
    app:layout_constraintHorizontal_bias=&quot;0.571&quot;
    app:layout_constraintStart_toStartOf=&quot;parent&quot;
    app:layout_constraintTop_toBottomOf=&quot;@+id/editEntranceTextTextPassword3&quot;
    tools:ignore=&quot;TouchTargetSizeCheck,TextContrastCheck&quot; /&gt;

&lt;!-- Это кнопка отвечающая за переход на страницу для сброса пороля --&gt;
&lt;TextView
    android:id=&quot;@+id/textForgot&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@id/editEntranceTextTextPassword3&quot;
    android:layout_marginHorizontal=&quot;150dp&quot;
    android:layout_marginTop=&quot;38sp&quot;
    android:clickable=&quot;true&quot;
    android:focusable=&quot;true&quot;
    android:gravity=&quot;center&quot;
    android:minHeight=&quot;48dp&quot;
    android:text=&quot;@string/Forgot_hint&quot;
    android:textColor=&quot;@color/black&quot;
    android:textSize=&quot;14sp&quot; /&gt;

&lt;!-- Это текс отвечающий за информирование кнопки о Создании аккаунта --&gt;
&lt;TextView
    android:id=&quot;@+id/textCreate&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@id/editEntranceTextTextEmailAddress&quot;
    android:layout_marginHorizontal=&quot;165dp&quot;
    android:layout_marginTop=&quot;229dp&quot;
    android:text=&quot;@string/no_account_text&quot;
    android:textColor=&quot;@color/black&quot;
    android:textSize=&quot;12sp&quot; /&gt;

&lt;!-- Это кнопка для создание аккаунта, в случае если его нету --&gt;
&lt;Button
    android:id=&quot;@+id/button_create&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_below=&quot;@+id/button_enter&quot;
    android:layout_marginStart=&quot;105dp&quot;
    android:layout_marginTop=&quot;140dp&quot;
    android:layout_marginEnd=&quot;106dp&quot;
    android:layout_marginBottom=&quot;8dp&quot;
    android:backgroundTint=&quot;@color/white&quot;
    android:text=&quot;@string/create_on_account_button&quot;
    android:textColor=&quot;@color/black&quot;
    android:textSize=&quot;12sp&quot;
    app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
    app:layout_constraintEnd_toEndOf=&quot;parent&quot;
    app:layout_constraintHorizontal_bias=&quot;1.0&quot;
    app:layout_constraintStart_toStartOf=&quot;parent&quot;
    app:layout_constraintTop_toBottomOf=&quot;@+id/button_enter&quot;
    tools:ignore=&quot;TouchTargetSizeCheck&quot; /&gt;





</RelativeLayout>

Лог ошибки при нажатии на кнопку

022-12-10 22:01:34.284 20990-20990/com.example.afec E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.afec, PID: 20990
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.example.afec.MainActivityEntrance.onClick(MainActivityEntrance.java:57)
        at android.view.View.performClick(View.java:6597)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Spark
  • 7
  • 3
  • 1
    Для начала прочтите это: https://ru.stackoverflow.com/a/797532/11515. Потом исправьте вопрос так, чтобы на него можно было ответить. Нужен лог ошибки и тот код, который непосредственно с ней связан. Можно, конечно, в дополнение и весь проект целиком выложить, чтобы его можно было без лишних телодвижений запустить и увидеть вашу ошибку, но потом не жалуйтесь что кто-то его выложит в маркет раньше вас ;) А вот огромные портянки кода, в которых и разобраться сложно и запустить нельзя - не особо помогают получить ответ. – woesss Dec 10 '22 at 08:34
  • @woesss спасибо за информацию, проект полностью скинул – Spark Dec 10 '22 at 09:16
  • 1
    Я сказал "можно в дополнение", но качать и запускать чужие проекты с дисков станет далеко не каждый и ссылка может "протухнуть" - поэтому вся информация необходимая для решения проблемы должна быть непосредственно здесь. Просто проблему нужно локализовать - то есть выкладывать здесь не весь код, а минимально необходимый. Если вы не понимаете как сократить - оставьте как было. Самое главное: если приложение вылетает - в вопросе должен быть лог ошибки. – woesss Dec 10 '22 at 09:34
  • 1
  • 1
    @Spark Не ложи проекты в яндекс диск. Для этого есть github У многих есть гитхаб аккаунты, зайдут, посмотрят, посоветуют по коду. А с Яндекс диска вряд ли кто-либо будет замарачиваться. – Vladimir Glinskikh Dec 10 '22 at 14:13
  • Ну да тут нужен лог ошибки без него не понять – Madoka Magica Dec 10 '22 at 14:39
  • @woesss Извиняюсь, сильно туплю :(. Лог предоставил – Spark Dec 10 '22 at 16:04
  • @VladimirGlinskikh Извиняюсь, все исправил – Spark Dec 10 '22 at 16:04
  • @MadokaMagica добавил – Spark Dec 10 '22 at 16:04
  • 1
    Ну вот теперь всё ясно. Хотя очень внимательный и дотошный посетитель мог бы и по коду это разглядеть - но гораздо проще найти причину по логу ошибки. – woesss Dec 10 '22 at 17:21

1 Answers1

1

Ну давайте разберём что написано в сообщении об ошибке.

Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

Попытка вызова метода getText() класса android.widget.EditText через ссылку на null

at com.example.afec.MainActivityEntrance.onClick(MainActivityEntrance.java:57)

В методе onClick() в классе com.example.afec.MainActivityEntrance на строке 57
А на этой строке у нас:

if (TextUtils.isEmpty(editCreateAccountTextTextEmailAddress.getText().toString())) {

Вспоминаем какой в ошибке указан метод и понимаем что ссылка editCreateAccountTextTextEmailAddress и есть наш null
А почему? Да потому что значение ей нигде присвоено.
Вы забыли найти поля ввода:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_entrance);
    editEntranceTextTextEmailAddress = findViewById(R.id.editEntranceTextTextEmailAddress);
    editEntranceTextTextPassword3 = findViewById(R.id.editEntranceTextTextPassword3);
    ...
}

woesss
  • 12,168
  • 1
  • 17
  • 32