Android - 硬编码登录无效

Android - Hardcode Login not Working

瞄准

通过AdminLogin.xml

登录我的Admin.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. 当我 select 后退按钮
  2. 时,AdminLogin 上的工具栏不允许我 return 到 LoginActivity
  3. 尽管输入了管理员名称和密码的硬编码输入,但管理员登录不起作用。单击“登录”按钮后,应用程序提示白色布局几秒钟,我被带回 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();
}

由于管理员登录是硬编码的,FirebaseUser currentUser = mAdminAuth.getCurrentUser(); 中的 currentUser 被设置为 null。这导致 activity 被发送回起始页 (sendUserToStartPage();)

发布完整的代码集后,您应该执行以下操作。

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

为什么?因为用户是空的。为什么?因为您将其硬编码到代码中。您的 Firebase 中不存在密码为 admin 的用户 admin(如果存在,您之前从未检查过)所以当您登录时,您没有为 admin 创建会话,因此 当前用户为 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
 }

很高兴能帮到你哟