为什么我的全局变量不存储在不同的活动中?

时间:2013-07-22 13:42:08

标签: android

我已经设置了一个包含各种全局变量的Java类:

class GlobalClass extends Application {
int global_counter;

String FileNameSmall[] = {"simage2", "simage1", "simage3"};
String FileName[] = {"image2", "image1", "image3"};
String Answers[] = {"blah1", "blah2", "blah3"};     
}

全局计数器用于计算数组。当我在一个活动中更新它时:

GlobalClass global = new GlobalClass();
global.global_counter = global.global_counter + 1;

它在该活动中运作良好。然而,如果我使用新的XML格式等开始一个新活动,那么声明使用全局变量它不会返回附加量,它返回到0。

我仍然是所有这个java的新手所以请耐心等待。我缺少一些基本的东西,如我的全球玻璃的android清单中的参考,或者我必须声明globalClass global = newGlobal();在extends活动类中?

任何帮助都会很棒

干杯

3 个答案:

答案 0 :(得分:1)

您需要将变量声明为static成员。这样他们在整个应用程序中具有相同的值:

public static int global_counter;

public static String FileNameSmall[] = {"simage2", "simage1", "simage3"};
public static String FileName[] = {"image2", "image1", "image3"};
public static String Answers[] = {"blah1", "blah2", "blah3"};    

p.s。:您还可以按照Java Singleton模式生成一个GlobalClass实例,或者将第一个创建的intance从一个活动传递到下一个活动。

希望这有帮助......干杯!

答案 1 :(得分:0)

当用户点击创建新屏幕并显示它的按钮时,您必须使用Activity.putExtra在活动之间传递任何变量或信息,如下所示:

 startForm.setOnClickListener(new OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                if ((!selectedFormCode.equalsIgnoreCase("")) && (!userCode.getText().toString().equals("")))
                {
                    Intent questionScreen = new Intent();
                    questionScreen.setClassName("com.android.artemis", "com.android.artemis.QuestionScreen");

                    func.ShowMessage("Loading Screen...");

                    // send preview config to next screen
                    questionScreen.putExtra("formProperties", formProperties.toString()); 
                    questionScreen.putExtra("selectedFormCode", selectedFormCode);
                    questionScreen.putExtra("selectedRegionCode", selectedRegionCode);
                    questionScreen.putExtra("selectedSubRegionCode", selectedSubRegionCode);
                    questionScreen.putExtra("selectedRegionLabel", selectedRegionLabel);
                    questionScreen.putExtra("selectedSubRegionLabel", selectedSubRegionLabel);
                    questionScreen.putExtra("userRegistrationCode", userCode.getText().toString());

                    startForm.setEnabled(false); // evita que o usuário clique mais de uma vez

                    startActivity(questionScreen);

                    startForm.setEnabled(true);
                }
                else
                {
                    func.ShowMessage("Complete todas as Informações antes de Continuar!");
                }
            }
        });

这样您只会发送您使用下一个屏幕的信息。

答案 2 :(得分:0)

请确保以下事项:

  1. 您的Application扩展程序类(GlobalClass)在清单XML中被引用,如下所示:<application android:name=".GlobalClass">

  2. 当您需要获取对Application对象的引用时,请从您的活动中运行函数getApplication()。您可以将其转换为GlobalClass。手动创建它的新实例不正确(GlobalClass global = new GlobalClass())。

  3. 您的应用程序对象是单例,因此您的变量不需要是静态的。

  4. 如果您不想使用系统的应用程序对象机制,请使用术语singleton并实施一个。单例是一个全局对象,可以在任何地方访问,只有一个实例并且可以保存全局变量。