如何引导用户进行其特定活动?

时间:2018-04-22 09:06:46

标签: android firebase firebase-realtime-database firebase-authentication

我正在构建一个应用程序,当用户首次安装它时,在MainActivity(启动器活动)中,应用程序会询问他是什么类型的用户(比如说Driver或Rider)?基于用户选择,他被引导到相应的登录屏幕。在用户登录后,他指向HomeActivity。如果他在没有注销的情况下关闭应用程序,下次打开应用程序时,他应该直接看到HomeActivity(基于他选择的用户类型)。对于一个用户,MainActivity中的代码如下:

@Override
protected void onStart() {
    super.onStart();

    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseAuth mAuth = FirebaseAuth.getInstance();
    FirebaseUser currentUser = mAuth.getCurrentUser();
    if (currentUser != null) {
        sendToStart();

    }
}

private void sendToStart() {

    Intent startIntent = new Intent(MainActivity.this,DriverHomeActivity.class);
    startActivity(startIntent);
    finish();
}

我是Android和Firebase的新手。我不知道应该如何为两类用户做这件事。

4 个答案:

答案 0 :(得分:1)

创建一个登录屏幕,在该屏幕中,用户可以选择工作类型(两个按钮或单选按钮)。

如果他选择了Driver,那么在数据库中创建一个Driver节点,并显示他所写的信息并将他引导到家庭活动中:

FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Drivers").child(user.getUid());
ref.child("name").setValue(name);
Intent startIntent = new Intent(MainActivity.this,DriverHomeActivity.class);
startActivity(startIntent);
finish();

也为骑手做同样的事。

如果是用户,请在不注销的情况下关闭应用。在应该打开的第一个活动中(例如:启动活动),检查是否有当前用户并检查用户类型:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
DatabaseReference driver = FirebaseDatabase.getInstance().getReference().child("Drivers"); 
DatabaseReference rider = FirebaseDatabase.getInstance().getReference().child("Riders");

  if (user != null) {
    driver.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() { 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) { 
                    Intent i = new Intent(SplashActivity.this, DriverHomeActivity.class);
                    startActivity(i);
                    finish();
                } else {
                    Intent intent = new Intent(SplashActivity.this, RiderHomeActivity.class);
                    startActivity(intent);
                    finish();
                  }
            @Override
          public void onCancelled(DatabaseError databaseError) {

               }
           });

在splash活动中,它将检查是否有当前用户(如果用户已登录)user.getUid()将返回当前用户ID,然后它将检查此用户ID是否在{{1}下} node,然后它将他引导到司机的家庭活动。

答案 1 :(得分:0)

在清单中使用此代码 并且 您应该在数据库中保存具有用户ID的用户类型,并在启动应用程序时首先检查,然后显示主页。

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

答案 2 :(得分:0)

使用SharedPreference机制可以解决您的问题。 在这里,您可以将登录状态保持在SharedPreference,如下所示: - 。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(); 
prefs.edit().putBoolean("login", true).commit();

当用户未注销并返回时,您应使用SharedPreference变量在启动画面中检查登录状态,并将用户移至相应的活动。

Boolean loginStatus = prefs.getBoolean(“login”,false);

if (loginStatus) {
// Move to Home activity
} else {
//Move to login screen
}

一点点文档here

答案 3 :(得分:0)

您可以考虑在Android应用程序中保留LauncherActivity,这将决定进一步启动哪个活动。示例LauncherActivity可能如下所示。

public class LauncherActivity extends AppCompatActivity {

    private boolean loggedIn = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        boolean isLoggedInAsDriver = getSharedPreferences.getBoolean("is_driver", false);
        startApplication(isLoggedInAsDriver);
        finish();
    }

    private void startApplication(boolean isLoggedInAsDriver) {
        Intent intent;
        if (isLoggedInAsDriver) {
            intent = new Intent(LauncherActivity.this, DriverActivity.class);
            startActivity(intent);
            finish();
        } else {
            intent = new Intent(LauncherActivity.this, RiderActivity.class);
            startActivity(intent);
            finish();
        }
    }
}

您的应用程序只能有一个启动程序,因此请在LauncherActivity中将AndroidManifest.xml标记为Android应用程序的启动程序,如下所示。

<activity
    android:name=".LauncherActivity"
    android:label="Your app name"
    android:theme="@style/AppTheme.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

现在您可能已经注意到我使用了一个标记(即isLoggedInAsDriver)来从LauncherActivity开始所需的活动。当您可以确定用户是驱动程序还是骑手时,这是您需要存储在SharedPreferences中的首选项数据。然后,每次通过LauncherActivity启动应用程序时,请检查存储的值并获取用户类型。根据用户类型,启动第二个活动。