0

我有以下活动:

public class MyActivity extends Activity {

        String myString;

        @Override
        protected void onCreate(Bundle bundle) {
            super.onCreate(arg0);
            setContentView(R.layout.myLayout)

            getData(bundle);
            doSmoethingWithMyString();
        }

        void getData(Bundle bundle) {
                if(bundle != null) {
                     myString = bundle.getString("myString")
                } else {
                    myString = getIntent().getStringExtra("myString")
                }

                if(myString == null)
                    finish();
        }

        void doSomethingWithMyString() {
                // here the string should be used
        }

}

如果 myString 为 null,则应该执行 finish() 并关闭活动。但是尽管调用了 finish(),但 doSomethingWithMyString() 似乎在那之后被执行并引发了 NullPointerException。如果我将 doSomethingWithMyString() 注释掉,则活动已正确关闭。

有什么想法吗?

4

2 回答 2

2

这应该可以解决您的问题。请参阅我的评论,了解为什么会这样。

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(arg0);
        setContentView(R.layout.myLayout)

        getData(bundle);
        if(!isFinishing()) {
         doSmoethingWithMyString();
        }
    }
于 2013-05-18T10:56:21.353 回答
1

finish() 不会立即关闭您的活动。只有当控件返回 Android 框架时才会启动关闭序列。所以你在 onCreate 中的所有剩余代码肯定会被执行

于 2013-05-18T10:54:29.773 回答