【问题标题】:public static variable is accessible in second activity in android?在android的第二个活动中可以访问公共静态变量吗?
【发布时间】:2011-12-07 00:20:03
【问题描述】:

我在安卓系统中工作。我的项目中有两个活动。我在这样的一个活动中声明了一个公共静态变量:-

public static String name="KUNTAL";

在我的第二个活动中,我尝试使用此变量,然后生成此名称变量不存在的错误。

如果将变量声明为 public,这是否可以在我的项目中的任何地方使用?

请告诉我我犯了什么错误。?

提前谢谢你...

【问题讨论】:

  • 您提供给我们的信息有限。不过,请检查您是否正确引用了类文件
  • @AnirbanBhui 你有什么问题?接受的答案对您不起作用吗?
  • 我也想在这个话题中找到解决方案stackoverflow.com/questions/11150701/…

标签: android


【解决方案1】:
public class Activity1 extends Activity {

    public static String name="KUNTAL";  //declare static variable. 

    @Override
    public void onCreate(Bundle savedInstanceState) {

    }
}

public class Activity2 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
         Activity1.name; //way to access static variable using dot operator.
    }
}

【讨论】:

  • 这样做是否存在任何性能问题(活动)?
  • 我认为不会有问题。但最好使用意图在活动之间传递参数,而不是静态变量。
  • @CQM:如果静态变量也是final(不会/永远不会改变),肯定不会有性能问题,因为编译器已经插入了而不是对变量的引用。如果它只是static 而不是final,那么它仍然不会成为性能问题,因为它将被视为类似于其他语言的“全局变量”。
  • 如果您了解静态声明的工作原理,那么您就会明白这种做法有多糟糕,因为我们打算将值从一个活动传递到另一个活动。
【解决方案2】:

我认为您必须以“静态方式”访问它们,即:

String myVar= name; // wrong
String myVar= TheClassThatContainsName.name; // right

【讨论】:

    【解决方案3】:

    您可以在任何 Activity 中使用指定为 public static 的变量,但您需要使用您声明它的 Activity 名称来访问该变量。

    要在第二个活动中访问,只需使用 ;

    Activity1.name ="Me";
    

    表示name变量属于Activity1,你在Acvity2中使用

    【讨论】:

      【解决方案4】:

      声明变量public static 不是在两个活动之间传递值的推荐方式。请改用Intent 对象:

      public class Activity1 extends Activity {
      
      @Override
      public void onCreate(Bundle savedInstanceState) {
         yourButton.setOnClicklistener(listener);
        }
      }
      

      //点击某个按钮启动Activity2:

      View.onClicklistener listener = new View.OnClickListener(){
      
         @Override
          public void onClick(View v) {
      
            Intent mIntent = new Intent(Activity1.this,Activity2.class);
            mIntent.putExtra("yourKey","yourValue");
            startActivity(mIntent);
      
           }
      
      };
      

      //然后在你的activity2中获取值:

      public class Activity2 extends Activity {
      
      @Override
      public void onCreate(Bundle savedInstanceState) {
      
         String yourValue = getIntent().getExtras().getString("yourKey");
      
        }
      }
      

      【讨论】:

        【解决方案5】:

        如果您在多个活动中使用相同的变量,则创建一个类似于 ActivityConsts{} 的类,并在其中声明和初始化该变量(在 ActivityConsts 中)。并使用类名从任何地方访问此变量。 前-

        declare a class-
        public class ActivityConsts {
        //your String var
        public static String name="KUNTAL";
        }
        

        现在在你的活动中:

        public class MyActivity extends Activity {
         @Override
         public void onCreate(Bundle savedInstanceState) {
          String yourStringVar = ActivityConsts.name;
         }
        }
        

        【讨论】:

          【解决方案6】:

          没有为您的变量指定数据类型。使用

          public static String name="KUNTAL"; 
          

          【讨论】:

          • 对不起,我在这里打错了...是的,我输入了数据类型...请告诉我其他原因。
          • Laurent 和 venky 你们都是对的,先生,我在访问时犯了错误......非常感谢大家......
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-01
          • 2012-08-24
          • 2015-12-02
          • 2012-02-03
          • 2018-05-22
          • 1970-01-01
          相关资源
          最近更新 更多