我有一个主要活动,第一次启动LoginActivity。每个人都可以。当用户登录时,用户的信息保存在共享偏好中(以向ApiRest发出请求),因此这个仅在第一次启动登录的功能正常工作,因为下次启动应用程序时我会留在mainActivity中。这个主要活动有3个片段(在viewpager中)3个片段在创建时请求自动从api获取信息。我的问题是在mainActivity的appbar中我有一个注销用户的菜单项。我的目的是将应用程序重定向到loginActivity并清除活动堆栈并清除共享偏好。但我的结果是。 1.我被重定向到登录活动,但当我关闭应用程序并再次打开它时,它不尊重我在主活动中的方法(如果它是第一次必须重定向到LoginActivity)并创建3个片段,立即启动发出请求,但他们没有参数(因为我清除共享的首选项,它们为null或0)所以应用程序崩溃。为什么我的方法首次打开LoginActivity被省略?谢谢先进
这是我的MainActivity,其方法是在注销后失败或省略
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Variables variableGlobal = (Variables)getApplicationContext();
SharedPreferences sharedPreferences= getSharedPreferences("firstTime",this.MODE_PRIVATE);
boolean firstTime = sharedPreferences.getBoolean("firstTime",true);
if(firstTime){
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putBoolean("firstTime", false);
edit.commit();
startActivity(new Intent(MainActivity.this, LoginActivity.class));
finish();
}....
这是我的退出代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.logoutmain) {
//Here i clear the sharedpref datos wich contains the user information
SharedPreferences pref = getSharedPreferences("datos",MODE_PRIVATE);
SharedPreferences.Editor editorpref = pref.edit();
editorpref.clear();
editorpref.commit();
//Here i clear the sharedPref that contains the value (boolean) to say the app if it is the first time or not
SharedPreferences pref2 = getSharedPreferences("firstTime",this.MODE_PRIVATE);
SharedPreferences.Editor editorpref2 = pref2.edit();
editorpref2.putBoolean("firstTime",true);
editorpref2.commit();
System.out.println("shared pref cleared");
Intent intent=new Intent(getApplicationContext(),MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
return true;
}...
这是我的loginActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btnLogin= (Button)findViewById(R.id.btnLogin);
api= ApiUtils.getAPIService();
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
login();
}
});
}
请记住,当我运行我的应用程序时,检查它是否是第一个运行它的方法启动到LoginActivity工作正常,它只启动firsTime,下次我总是在主活动中打开,但是当我注销它重定向我登录并清除堆栈和sharedpref,但OMITT方法是第一次chek,并让我在MainActivity和应用程序崩溃。为什么??感谢adavanced
答案 0 :(得分:0)
我发现您的逻辑存在问题,quickFix将在您的MainActivity中使用以下代码:
var firebaseList = loggedInUserId.flatMap((userId) =>
this.db.list(this.firebaseRoot.child(userId))) as FirebaseListObservable<any>
firebaseList.flatMap(items=>ob.push({foo:'bar'})).subscribe()