我正在OS 5上为Blackberry开发一个应用程序。我正在尝试在成功调用时访问一些先前初始化的变量。但是,变量并没有保持其价值,我找不到原因。
当应用程序启动时,testVariable设置为5,一切都按预期工作。但是,当我尝试从callConnected事件访问变量时,它返回到0.即使我将变量放在PhoneEvents类中,它仍然会返回0.它有一个值用于PhoneEvents而另一个用于屏幕。这些变量不应该只有一个值,因为它不是一个实例变量吗?我究竟做错了什么?有没有其他方法可以从PhoneEvents类和TestScreen类访问变量并让它保持其值?提前致谢。
public class TestApp extends UiApplication {
public TestApp() {
TestScreen screen = new TestScreen();
UiApplication.getUiApplication().pushScreen(screen);
}
public static void main(String[] args) {
Phone.addPhoneListener(new PhoneEvents());
TestApp app = new TestApp();
app.enterEventDispatcher();
}
}
// The main screen.
public class TestScreen extends MainScreen {
public TestScreen() {
this.setTitle("Test");
GlobalClass.testVariable = 5;
}
}
// A public static holding a variable I want to have access to.
public class GlobalClass {
public static int testVariable;
}
// The method that gets called when a call is made.
public class PhoneEvents implements PhoneListener {
public void callConnected(int callId) {
int x = GlobalClass.testVariable;
}
}
答案 0 :(得分:0)
这只是另一种方法。使GlobalClass成为单身人士。这将保证您每次都能获得同一个班级实例。
这是一个显示如何制作单身人士的链接。
Singleton with Arguments in Java
此维基百科链接将对单身人士进行深入解释。希望这有帮助
答案 1 :(得分:0)
PhoneListener回调在不同的进程中运行。你可以通过调用UiEngine.getUiEngine()。getActiveScreen()来注意这一点,当你在注册PhoneListener之前调用它时,它会从PhoneListener回调和应用程序屏幕调用它时返回电话屏幕。静态变量也是不同的。
一种解决方案是将您的应用程序数据放入RuntimeStore:
class ApplicationData
{
public int testVariable;
}
ApplicationData appData = new ApplicationData();
appData.testVariable = 5;
RuntimeStore.getRuntimeStore().put(MY_DATA_ID, appData);
public class PhoneEvents implements PhoneListener {
public void callConnected(int callId) {
ApplicationData appData = (ApplicationData) RuntimeStore.getRuntimeStore().get(MY_DATA_ID);
int x = appData.testVariable;
}
}