Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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
Java Android:在onCreate内部启动一个intent会导致无限循环/崩溃_Java_Android - Fatal编程技术网

Java Android:在onCreate内部启动一个intent会导致无限循环/崩溃

Java Android:在onCreate内部启动一个intent会导致无限循环/崩溃,java,android,Java,Android,我对Android/java还很陌生,遇到了我的第一个难题 我试图根据用户是否登录来有条件地更改起始视图(这里我已经设置了is_logged_,以便更简单地说明问题) 非常感谢 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我对Android/java还很陌生,遇到了我的第一个难题

我试图根据用户是否登录来有条件地更改起始视图(这里我已经设置了is_logged_,以便更简单地说明问题)

非常感谢

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        boolean is_logged_in = false;

        if(is_logged_in) {
            setContentView(R.layout.activity_main);
        } else {
            menu_sign_up(); // How would I pass the View?
        }
    }

    // Doesn't work, at least when called inside of MainActivity's onCreate
    public void menu_sign_up(/* View view */) {
        Intent intent = new Intent(this, SignUp.class);
        startActivity(intent);
    }

    // Example of a working method, at least when called from android:onClick in XML
    public void menu_sign_in(View view) {
        Intent intent = new Intent(this, SignIn.class);
        startActivity(intent);
        overridePendingTransition(0,0);
    }
}

public class SignUp extends MainActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sign_up);
    }

    // ...
}
******下面被截断的堆栈跟踪*********(adb logcat*:W)

您需要让onCreate()完成,然后将新活动移动到onResume()或onStart();当您的活动显示给用户时,这些将被调用,而不是它仍在初始化(自身)

另外,看起来您需要设置一个

onLoginFinished(int result);
回拨。。。尝试使用startActivityForResult()运行登录,并在onActivityResult()中捕获结果

或者


您创建自己的界面,一旦其他活动完成,它将调用onLoginFinished(isOK)回调,您可以在其中确定要使用哪个屏幕。

您当前的应用程序结构没有多大意义。
注册也必须是一项活动吗?您可以使用AlertDialog执行类似的操作。如果它确实需要是一个活动,那么让它扩展
活动
,在这种情况下扩展
家庭活动
没有多大意义

我也不喜欢将
setContentView()
放在逻辑语句中。onCreate()仅在创建活动时调用。因此,如果您启动
注册
活动,然后按后退按钮,则
家庭活动
将不会有布局


编辑:正如Shark所说,您似乎没有办法将数据从
注册
传递回
家庭活动
。您应该尝试使用
startActivityForResult()
,然后在
SignUp
中使用
setResult()
来说明它是否成功。

不要使用意图,而是将else部分中的内容视图设置为特定的SignUp xml文件我以前尝试过这个,但我想切换使用方法的类。(在本例中,使用SignUp.java)。+1完全正确!作为第三种选择,您可以运行一个异步任务,显示一个对话框,检查登录状态,然后重定向到注册页面或显示主布局。不知何故,我认为他不会那么清楚。看看张贴的代码,看看日志。。。我在那里没有看到Log.wtf()的痕迹。是的,老实说,在我看来,它就像一个无限循环。。。MainActivity将始终启动注册,该注册调用Super.OnCreate,这是MainActivity。。。它将始终启动注册…:)谢谢你的回答。。。很高兴了解onResume/onStart。正如@Roloc所指出的,这是一个简单的继承问题/无限循环。我还打算编写setContentView。这根本不应该是有条件的。也许将主布局默认设置为View.GONE,然后有条件地显示/OnResume更有意义。但是+1,因为子活动扩展了父活动的奇异性。是的。我假设OP只是想弹出一个屏幕,提示用户注册,如果他们没有注册的话。这下肯定还有一个基本布局,因为如果用户退出注册,那么应用程序就会处于一个奇怪的状态。是的,请看我对Sharks的评论。。。这对我来说是一个无限的循环。因为尾流锁,它没走那么远,这。。。感谢上帝:)非常感谢你的回答。选择此选项是因为您是正确的,注册不应从HomeActivity继承。当我重新构建我的应用程序时,我将研究你的其他观点。
onLoginFinished(int result);