Android - вход с жестким кодом не работает

цель

Для входа в мой Admin.xml через AdminLogin.xml

Поток классов

AdminLoginActivity ---> AdminActivity

AdminLoginActivityClass

    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class AdminLoginActivity extends AppCompatActivity {

    private Toolbar jAdminToolbar;

    private EditText jAdminID;
    private EditText jAdminPassword;

    private Button jAdminLoginBtn;

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

        jAdminToolbar = (Toolbar) findViewById(R.id.adminLoginToolbar);
        setSupportActionBar(jAdminToolbar);
        getSupportActionBar().setTitle("Admin Login");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        jAdminID = (EditText) findViewById(R.id.adminLoginName);
        jAdminPassword = (EditText) findViewById(R.id.adminLoginPassword);
        jAdminLoginBtn = (Button) findViewById(R.id.adminLoginBtn);

        jAdminLoginBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                String adminLoginID = jAdminID.getText().toString();
                String adminLoginPassword = jAdminPassword.getText().toString();

                if(adminLoginID.equals("admin")&& adminLoginPassword.equals("admin")){
                    Intent intentAdmin = new Intent(AdminLoginActivity.this, AdminActivity.class);
                    intentAdmin.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intentAdmin);
                    finish();
                }else{
                    Toast.makeText(AdminLoginActivity.this, "Failed Login", Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        });
    }
  }

AdminActivityClass

import android.content.Intent;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class AdminActivity extends AppCompatActivity {

    private FirebaseAuth mAdminAuth;
    private Toolbar jAdminToolbar;

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

        mAdminAuth = FirebaseAuth.getInstance();
        jAdminToolbar = (Toolbar) findViewById(R.id.adminToolbar);
        setSupportActionBar(jAdminToolbar);
        getSupportActionBar().setTitle("Administrator");


    }

    @Override
    public void onStart() {
        super.onStart();
        FirebaseUser currentUser = mAdminAuth.getCurrentUser();

        if(currentUser == null){
            sendUserToStartPage();
        }

    }

    private void sendUserToStartPage(){
        Intent intentStart = new Intent(AdminActivity.this, StartActivity.class);
        startActivity(intentStart);
        finish();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        getMenuInflater().inflate(R.menu.activity_admin_menu, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);

        if(item.getItemId() == R.id.mainSignOutBtn){
            FirebaseAuth.getInstance().signOut();
            sendUserToStartPage();
        }

        if(item.getItemId() == R.id.mainViewContactsBtn){
            Intent intentViewContacts = new Intent(AdminActivity.this, AllUsersActivity.class);
            startActivity(intentViewContacts);
        }

        return true;
    }
}

Файл манифеста

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
    android:name=".SecurityApp"
    android:allowBackup="true"
    android:icon="@mipmap/appiconone"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/appiconone"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".StartActivity" />
    <activity
        android:name=".ResidentRegistrationActivity"
        android:parentActivityName=".StartActivity" />
    <activity
        android:name=".AdminLoginActivity"
        android:parentActivityName=".LoginActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.lenovo.securityapp.LoginActivity" />
    </activity>
    <activity
        android:name=".LoginActivity"
        android:parentActivityName=".StartActivity" />
    <activity
        android:name=".SettingsActivity"
        android:parentActivityName=".MainActivity" />
    <activity
        android:name=".DetailsActivity"
        android:parentActivityName=".SettingsActivity" />
    <activity
        android:name=".AllUsersActivity"
        android:parentActivityName=".MainActivity" />

    <activity android:name=".UserProfileActivity" />
    <activity
        android:name=".HelpInformationActivity"
        android:parentActivityName=".StartActivity" />

    <activity android:name=".AdminActivity" />

</application>

проблема

  1. Панель инструментов на AdminLogin не позволяет мне вернуться к LoginActivity, когда я выбираю кнопку Назад
  2. Вход администратора не работает, несмотря на то, что введены жестко запрограммированные данные для имени администратора и пароля. После нажатия кнопки "Вход" приложение на несколько секунд выводит на экран "Белую раскладку". Я возвращаюсь в StartActivity, и в сообщении Toast не отображается "Failed Login".

РЕШЕНИЕ

Проблема заключалась в том, что "AdminActivityClass" имел

 @Override
public void onStart() {
    super.onStart();
    FirebaseUser currentUser = mAdminAuth.getCurrentUser();

    if(currentUser == null){
        sendUserToStartPage();
    }

}

private void sendUserToStartPage(){
    Intent intentStart = new Intent(AdminActivity.this, StartActivity.class);
    startActivity(intentStart);
    finish();
}

Поскольку логин администратора был жестко закодирован, currentUser в пределах FirebaseUser currentUser = mAdminAuth.getCurrentUser(); был установлен на null, Это привело к отправке действия обратно на стартовую страницу (sendUserToStartPage();)

2 ответа

Решение

После публикации вашего полного кода вы должны сделать следующее.

comment out the sendUserToStartPage(); inside of the currentuser == null and then try.

Зачем? Потому что пользователь НУЛЬ. Зачем? потому что вы жестко закодировали это в коде. Пользователь admin с паролем admin не существует в вашей Firebase (и если он есть, вы никогда не проверяли его ранее), поэтому при входе вы не создаете сеанс для администратора, поэтому текущий пользователь имеет значение null.

попробуйте сделать это

if ("admin".equals(adminLoginID)) {
    if ("admin".equals(adminLoginPassword)) {
        //goto activity
    }
} else {
    //not admin
}

это может быть лучше на самом деле

if (("admin".equals(adminLoginID)) && ("admin".equals(adminLoginPassword))) {
    //goto activity
} else {
    //not admin
}

или даже это....

if (("admin".equals(jAdminID.getText().toString().trim())) && ("admin".equals(jAdminPassword.getText().toString().trim()))) {
    //goto activity
} else {
    //not admin
}

Попробуйте этот пример в манифесте. Вы в манифесте за действия пропускаете тему. Кроме того, его пропустили метаданные.

<activity
    android:name=".Leagues.CreateLeague"
    android:label="Create League"
    android:parentActivityName=".MainActivity"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme2">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.aaa.bbb.MainActivity" />
</activity>

Попробуй как это с умом

  • взять String переменная глобально и declare and intialise их
  • на следующем шаге вам нужно добавить проверки

String str_admin="admin";
if ((str_admin.equals(adminLoginID)) && (str_admin.equals(adminLoginPassword))) {
//pass reference of activity which you want to open it 
 } else {
//not admin
 }

Рад помочь вам

Другие вопросы по тегам