2016-08-27 53 views
-2

我有两个活动。我需要调用从我所做的第一次活动B. 在活动A创建一个功能是: 在活动A,我创建了功能:使用getInstance()从活动B调用活动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; } 

但我有错误就在这里说:

语法错误令牌“ ActivityA“,@期待 ,当我将第二个类更改为:ActivityA.getInstance().getRSS(queryC); 我得到这个: 该方法的getInstance()是未定义的类型ActivityA

+0

在您的Application类中编写此函数并使用您的应用程序实例进行访问。这将很容易实现你的目标。 –

+0

抱歉,但我很困惑!什么是应用程序类? –

+0

好吧,让我给你一小段代码,这将帮助你实现你的目标。 –

回答

-3

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

double [] query= super.getRSS(queryC);

希望这会有所帮助。

+0

超级不会工作,因为活动B不扩展活动A.只有当B活动扩展活动A时,这才会起作用。 –

+0

但是,在您的代码中,您提到公共类ActivityB扩展了活动A – Cool7

+0

即使这样做也行不通。他希望从之前的活动开始,这将是一个单独的实例。 –

0

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

+0

我该如何处理意图?我正在看[用Intent.putExtra发送数组](http://stackoverflow.com/questions/3848148/sending-arrays-with-intent-putextra) 是这意味着我不需要功能?你能指导我使用意图吗? –

+0

我试图与意图,但ActicityB永远不会开始! –

+0

请帮忙。 Thanx –

0

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

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

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

-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类,你可以访问相同的方式。

希望这会帮助你。

谢谢。

+0

如果您创建应用程序类,那么您还需要在清单文件中声明它。 –

+0

您最好使用'YourApplication.getInstance(Context context)',它将'context.getApplicationContext()'转换为应用程序实例并避免静态引用。 –

+0

它没有解决我的问题,但它帮助我如何创建其他活动的实例 –

相关问题