使用 Bundle 将值从一个活动移动到另一个活动,但无法从创建方法获取它们?



我的java技能不强。我只用它编程了一两个月,所以请原谅我的愚蠢。

我试图在一个bundle中的方法之间传递值,以允许我保存和加载一些游戏设置,但是尽管我认为我的值正在转移,我无法从"on create method"中获得值,以便在我的程序的其余部分中使用。

我在这里加载并打包了我的布尔值(我剪掉了很多或者希望不相关的东西):

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
vV = new VortexTouch(this);     
CONTEXT = this;
// LOAD DATA
SharedPreferences settings = getSharedPreferences("GAME_DATA",MODE_PRIVATE);
_dPad = settings.getBoolean("GamePad", true);
// PASS DATA
intent = new Intent();
intent.setClass(this,VortexRenderer.class);
intent.putExtra("my_data", true); // should be _dPad but put 'true' in there for now.
startActivity(intent);
// PASS DATA END      
setContentView(vV);
}

然后在我的VortexRenderer类中接收布尔值:

public class VortexRenderer extends Activity implements GLSurfaceView.Renderer {
private static final String LOG_TAG = VortexRenderer.class.getSimpleName(); 
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); 
Bundle bundle = getIntent().getExtras();
_dPad = bundle.getBoolean("my_data");
_dPad = true; // testing to see if value carries, it doesn't :-( 
finish();
}
public boolean _dPad;
public void SomeGameAction(){
//try to do something with _dPad but it has not taken on a value of true. why? 
}

所以我认为_dPad的值是从一个活动到另一个,但它不是从VortexRenderer 'onCrate'方法中得到的。很明显我没理解什么…有人能帮忙吗?谢谢。

我的游戏是围绕着这个优秀的教程构建的,如果这有帮助的话:http://www.droidnova.com/android-3d-game-tutorial-part-i, html

312.

不太有用,但如果你感兴趣,这就是我想添加的代码:https://market.android.com/details?id=com.clockworkrobot.spacewarz

在第一个活动中,而不是

intent.putExtra("my_data", true);
使用

Bundle bundle = new Bundle();
bundle.putBoolean("my_data", true);
intent.putExtra("android.intent.extra.INTENT", bundle);

然后在第二个活动中,而不是

Bundle bundle = getIntent().getExtras();
使用

Bundle bundle = getIntent().getBundleExtra("android.intent.extra.INTENT");

我必须诚实…我不知道你到底想干什么。

在你的onCreate中调用finish会在你启动activity的时候结束它。

你似乎是传递/接收布尔与意图正确,但然后硬编码_dPad为真,我希望只是为了调试,因为它肯定使它不必要的意图传递它。

你的VortexRenderer活动的总体目的是什么?我想会有更好的方法来实现你的目标,而不需要创建一个新的活动。

我还建议使用日志。v(标签、消息);实用工具和logcat来帮助您调试挑战。

代码缩进也肯定有助于代码的可读性。

每次对我来说都有效的最佳方法是使用全局静态类来保存临时数据。使用setter和getter会更容易理解。

最新更新