我正在构建一个应用程序,当用户首次安装它时,在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的新手。我不知道应该如何为两类用户做这件事。
答案 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
启动应用程序时,请检查存储的值并获取用户类型。根据用户类型,启动第二个活动。