使用getInstance()从活动B调用活动A中的函数

时间:2016-08-27 13:30:57

标签: java android function instance

我有两项活动。我需要调用Activity B中活动A中创建的函数。 我第一次做的是: 在活动A中,我创建了我的函数:

public double [] getRSS(double [] queryC){

if (wifiList!=null){
    for (int i=0; i<wifiList.size(); i++){
    switch (wifiList.get(i).BSSID){ 
      case "56:2e:27:43:4b:f5" : queryC [0]= + wifiList.get(i).level ; break; 
      case "20:18:d8:4f:55:e8": queryC [1]  = + wifiList.get(i).level ; break; 
      case "7c:e9:d3:31:8f:b9": queryC [2] =  + wifiList.get(i).level ; break; 

    }
     }  
    }
return queryC;
}
活动B中的

public class ActivityB extends  ActivityA{
.......
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activiteb);
.......
ActivityA w = new  ActivityA();
double [] query= w.getRSS(queryC);
.......
}
}

然后有时它有时不起作用! 我检查了这个答案Can i Create the object of a activity in other class?,我做了同样的事情:

static ActivityA ActivityA;

然后:

ActivityA = this; 
public static ActivityA getInstance() { return ActivityA; }

但我在这里说错误:

  

令牌上的语法错误&#34; ActivityA&#34;,@ expected   当我将第二课改为此时:ActivityA.getInstance().getRSS(queryC);   我明白了:   对于ActivityA

类型,方法getInstance()未定义

4 个答案:

答案 0 :(得分:0)

一项活动永远不应该引用另一项活动的实例。需要在两者之间传递的任何数据都应该通过用于启动第二个活动的Intent完成,或者放入单例数据结构中。

答案 1 :(得分:0)

不要走这条路!对于每个活动,附加生命周期并手动创建它只会导致问题。存储活动本身的实例只会造成不应该发生的泄漏。

尝试在与活动无关的类中实现getRSS(),可能使用getApplicationContext()。如有必要,请静态存储您需要的数据,或通过其意图将其移交给ActivityB

也不要使用与该字段的ActivityA类相同的名称。

答案 2 :(得分:-2)

        public class YourApplication extends Application {

            private static YourApplication mInstance;

            @Override
            public void onCreate() {
                super.onCreate();
                mInstance = this;


            public static YourApplication getInstance() {
                return mInstance;
            }

 public double [] getRSS(double [] queryC){

        if (wifiList!=null){
            for (int i=0; i<wifiList.size(); i++){
                switch (wifiList.get(i).BSSID){
                    case "56:2e:27:43:4b:f5" : queryC [0]= + wifiList.get(i).level ; break;
                    case "20:18:d8:4f:55:e8": queryC [1]  = + wifiList.get(i).level ; break;
                    case "7c:e9:d3:31:8f:b9": queryC [2] =  + wifiList.get(i).level ; break;

                }
            }
        }
        return queryC;
    }


        }

在您的ActivityA类中,

YourApplication.getInstance().getRSS(queryC)

在ActivityB类中,您可以以相同的方式访问。

希望这会对你有所帮助。

感谢。

答案 3 :(得分:-3)

使用super关键字调用ActivityA的方法,如:

/sass

希望这会有所帮助。