Используя Bundle для перемещения значения из действия в действие, но не можете получить их при создании метода? - PullRequest
3 голосов
/ 31 августа 2011

Мои навыки Java не сильны. Только программирую в нем месяц или два, так что прости мою глупость.

Я пытаюсь передать значения между методами в комплекте, чтобы позволить мне сохранить и загрузить некоторые настройки игры, но, хотя я думаю, что мои значения передаются, я не могу получить значение из метода «on create» для используйте в остальной части моей программы.

Я загружаю и объединяю свои логические значения здесь (я вычеркнул много или, надеюсь, не относящиеся к делу вещи):

@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,312.html

Менее полезно, но если вам интересно, я пытаюсь добавить код в: https://market.android.com/details?id=com.clockworkrobot.spacewarz

Ответы [ 3 ]

2 голосов
/ 31 августа 2011

В первом упражнении вместо

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");
0 голосов
/ 01 сентября 2011

Я должен быть честным ... Я не уверен, что вы действительно пытаетесь сделать здесь.

Вызов завершить в onCreate завершит вашу деятельность, как только вы начнете.

Вы, похоже, правильно передаете / получаете логическое значение с намерением, но затем жестко кодируете _dPad в true, я надеюсь, что это просто для отладки, потому что, безусловно, нет необходимости передавать его с намерением.

Какова общая цель вашей деятельности VortexRenderer? Я полагаю, что будет лучший способ достичь своей цели без создания нового вида деятельности.

Я также рекомендую использовать Log.v (тег, сообщение); Утилита и LogCat, чтобы помочь себе отладить проблемы.

Отступ кода также наверняка поможет читабельности кода.

0 голосов
/ 01 сентября 2011

Лучший способ, который работает для меня каждый раз, - это использовать класс Global Static для хранения ваших временных данных.Использовать сеттеры и геттеры будет гораздо проще и понятнее.

...