Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 登录屏幕上“后退”按钮的不必要行为活动_Android_Facebook_Splash Screen_Facebook Android Sdk - Fatal编程技术网

Android 登录屏幕上“后退”按钮的不必要行为活动

Android 登录屏幕上“后退”按钮的不必要行为活动,android,facebook,splash-screen,facebook-android-sdk,Android,Facebook,Splash Screen,Facebook Android Sdk,所以我正在构建一个应用程序,它有一个带有facebook登录按钮的启动/登录屏幕。 在用户登录并返回一个带有info的用户对象后,我想将一些数据插入数据库(代码中还没有,但无所谓),然后打开MainActivityactivity Thread nohistory = new Thread () { public void run () { try { Intent i = new Intent(Splash.this, ActivitySpl

所以我正在构建一个应用程序,它有一个带有facebook登录按钮的启动/登录屏幕。 在用户登录并返回一个带有info的用户对象后,我想将一些数据插入数据库(代码中还没有,但无所谓),然后打开
MainActivity
activity

  Thread nohistory = new Thread () {
    public void run () {
        try {
            Intent i = new Intent(Splash.this, ActivitySplash.class);
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);
            finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
nohistory.start();
第一次发射时,一切正常: 如果用户已登录(=存在活动会话),将启动
main活动。
如果用户未登录,登录按钮显示要求用户登录,并在成功时再次打开
main活动

如果用户从
MainActivity
点击后退按钮,
将显示一个白色屏幕,并保持这种状态。如果再次按下后退按钮,应用程序将关闭,当应用程序恢复时(例如,从“最近的应用程序”窗口),白色屏幕将再显示1-2秒,然后进入
MainActivity

我认为它之所以发生是因为它试图返回到
splash活动
,但由于我
finish()
它无法。。。尽管如此,我不太确定,因为我尝试使用
Intent.FLAG\u ACTIVITY\u CLEAR\u TOP
Intent.FLAG\u ACTIVITY\u NEW\u TASK
清理后台

什么会导致这种行为?我如何修复它?

额外信息:
-
SplashActivity
设置为使用应用程序清单中的
意图过滤器作为应用程序的启动器启动:

-在HTC Sensation XE/w安卓4.1上测试

下面是一些代码(
SplashActivity
):

公共类SplashActivity扩展活动{
私人UiLifecycleHelper uiHelper;
private Session.StatusCallback回调=
新建会话。StatusCallback(){
@凌驾
公共无效调用(会话、会话状态、异常){
onSessionStateChange(会话、状态、异常);
}
};
私有ArrayList权限;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
uiHelper=新UiLifecycleHelper(此为回调);
uiHelper.onCreate(savedInstanceState);
权限=新建ArrayList();
权限。添加(“电子邮件”);
权限。添加(“用户生日”);
Session=Session.getActiveSession();
if(session!=null&&session.isOpened()){
如果(!session.getPermissions()包含(权限)){
session.requestNewReadPermissions(newsession.NewPermissionsRequest(SplashActivity.this,permissions));
}
}否则{
LoginButton authButton=(LoginButton)findViewById(R.id.login_按钮);
authButton.setReadPermissions(权限);
}
}
@凌驾
受保护的void onResume(){
super.onResume();
uiHelper.onResume();
}
@凌驾
受保护的void onPause(){
super.onPause();
uiHelper.onPause();
}
private void OnSessionState更改(会话、会话状态、异常){
if(session!=null&&state.isOpened()){
Request.executeRequestAsync(会话,新请求.GraphUserCallback(){
@凌驾
未完成公共无效(GraphUser用户,响应){
如果(用户!=null){
//这里还没有代码
}
}
});
意向意向=新意向(SplashActivity.this、MainActivity.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
intent.addFlags(intent.FLAG\u活动\u新任务);
星触觉(意向);
完成();
}
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
onActivityResult(请求代码、结果代码、数据);
}
@凌驾
SaveInstanceState上受保护的无效(束超出状态){
super.onSaveInstanceState(超出状态);
uiHelper.onSaveInstanceState(outState);
}
@凌驾
公共空间{
super.ondestory();
uiHelper.ondestory();
}
}

听起来您不想在堆栈上使用splash活动。如果是这样,你可以这样做来启动你的主要活动

  Thread nohistory = new Thread () {
    public void run () {
        try {
            Intent i = new Intent(Splash.this, ActivitySplash.class);
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);
            finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
nohistory.start();

希望这能有所帮助。

听起来您不想在堆栈上进行飞溅活动。如果是这样,你可以这样做来启动你的主要活动

  Thread nohistory = new Thread () {
    public void run () {
        try {
            Intent i = new Intent(Splash.this, ActivitySplash.class);
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);
            finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
nohistory.start();

希望这有帮助。

找到了解决方案

显然,这是
if
行:
如果(!session.getPermissions().包含(权限))

它所做的是检查我的
权限
数组(作为一个对象)是否在当前会话的权限数组中,如果没有(基本上总是这样),则会触发
session.requestNewReadPermissions(newsession.NewPermissionsRequest(SplashActivity.this,permissions))

我所做的只是将其更改为我的权限数组字符串之一:
if(!session.getPermissions().包含(“电子邮件”)

现在它工作了!没有白色屏幕了。我不知道为什么会有这样的行为。。。可能是因为活动无法正确地
finish()。。。不知道,但它有效

我是如何发现的:

只需将
Log.i()
塞进
if
的内部,并注意到它总是会触发,即使它不应该触发。

找到了解决方案

显然,这是
if
行:
if