为什么Bundle对象在onCreate()上始终为空?

我正在尝试进入Android编程,我从一本书中拿了一些例子。 在这些例子中请求放置下面的代码:

public class ExemploCicloVida extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); Log.i(TAG, getClassName() + " onCreate() called on: " + icicle); TextView t = new TextView(this); t.setText("Exemplo de ciclo de vida de uma Activity.\nConsulte os logs no LogCat"); setContentView(t); } } 

我想知道为什么Bundle对象在这种情况下总是为空。

Solutions Collecting From Web of "为什么Bundle对象在onCreate()上始终为空?"

如果没有以前保存的状态,该包将为空。

这是在Activity API文档中提到的。

在我的情况下,原因是具体的活动没有清单文件中声明的主题。

要解决这个问题,打开AndroidManifest.xml,点击应用程序,在应用程序节点中select崩溃的活动,并在属性的主题字段添加主题。 就我而言,是的

 @style/Theme.AppCompat.Light.DarkActionBar 

但是您可以从您的其他活动中复制主题。

PS:我知道这是一个老问题的答案,但是我在寻找修复方法时偶然发现了这个问题,并且没有find一个可行的解决scheme,所以这可能会帮助其他人。

运行此代码并按Ctrl + F11旋转屏幕。 该包不会为空。

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if (savedInstanceState != null) { Toast.makeText(this, savedInstanceState.getString("s"), Toast.LENGTH_LONG).show(); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("s", "hello"); } 

onSaveInstanceState(Bundle)将被调用。 然后,创build活动对象,并使用非null Bundle savedInstanceState调用onCreated(Bundle)

我想你想阅读进入你的活动的参数。 使用这个function:

 protected String getStringExtra(Bundle savedInstanceState, String id) { String l; l = (savedInstanceState == null) ? null : (String) savedInstanceState .getSerializable(id); if (l == null) { Bundle extras = getIntent().getExtras(); l = extras != null ? extras.getString(id) : null; } return l; }