仅显示一次登录活动,并在下次启动主活动时显示

时间:2016-03-02 09:48:58

标签: java android

我想在第一次进入app时打开login_activity,然后在第二次进入app打开main_activity。

我创造了一些东西,但它不起作用。所以我想知道我做错了什么? 这是我的LoginActivity

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        userName = (EditText) findViewById(R.id.username);
        userPhone = (EditText) findViewById(R.id.userPhone);
        loginBtn = (Button) findViewById(R.id.buttonLogin);

        dbHandler = new LogsDBHandler(this);

        loginBtn.setOnClickListener(this);
        setTitle("AMS - biomasa | prijava");

       SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
        if (pref.getBoolean("activity_executed", false)) {
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            finish();
        } else {
            SharedPreferences.Editor edt = pref.edit();
            edt.putBoolean("activity_executed", true);
            edt.commit();
        }
    }

    public void insert() {
        User user = new User (
                userName.getText().toString(),
                userPhone.getText().toString());
        dbHandler.addUser(user);
        Toast.makeText(getBaseContext(), "Prijavljeni ste!", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onClick(View v) {
        if (v == loginBtn && validateUser()) {
            insert();
        }
    }

在主要活动中,我只有图像和两个按钮。 在清单中,我将启动器添加到主要和登录活动。

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

我在这里做错了什么?

4 个答案:

答案 0 :(得分:8)

  1. 创建一个启动活动,将其称为SplashActivity

    public class SplashActivity extends Activity{
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
    
    // decide here whether to navigate to Login or Main Activity 
    
        SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
        if (pref.getBoolean("activity_executed", false)) {
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            finish();
        } else {
            Intent intent = new Intent(this, LoginActivity.class);
            startActivity(intent);
            finish();
        }
    }
    
    }
    
  2. 在您的LoginActivity中,只需将activity_executed设置为true

    即可
    public void insert() {
        User user = new User (
            userName.getText().toString(),
            userPhone.getText().toString());
        dbHandler.addUser(user);
        Toast.makeText(getBaseContext(), "Prijavljeni ste!", Toast.LENGTH_SHORT).show();
    
    //set activity_executed inside insert() method.
    SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
    SharedPreferences.Editor edt = pref.edit();
    edt.putBoolean("activity_executed", true);
    edt.commit();
    
    }
    
  3. 更改清单如下 -

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

答案 1 :(得分:1)

您可以将启动器活动更改为主要活动。所以当您打开应用程序时,它从主要活动开始,您可以检查他是否已登录。如果他没有登录,你必须将他导航到登录活动,否则你只需按原样进行操作。以下是清单文件..

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

答案 2 :(得分:0)

您应该添加另一个在任何内容之前加载的空活动(没有UI)。

然后使用SharedPreferences存储一些值。因此,如果用户已经打开过您的应用程序一次,则会存储该值。然后使用条件来检查此值。如果您保存的值跳过login_activity并直接转到main_activity,则直接转到login_activity

答案 3 :(得分:0)

关于该行的问题

if (pref.getBoolean("activity_executed", false)) {

您可以实现此方法来调用if(appIsLoggedIn)

public boolean appIsLoggedIn(){
      return pref.getBoolean("activity_executed", false);
}