【问题标题】:Why can't I call a Static method from another class which contains a Toast?为什么我不能从另一个包含 Toast 的类中调用静态方法?
【发布时间】:2013-03-15 17:20:39
【问题描述】:

在发布此内容之前,我进行了研究,但我很难准确理解问题所在。所以这是我在第 1 课中的方法:

public static void scan() {
    for( int j=0; j< objarray.size();j++)
    {

        locationB.setLatitude(objarray.get(j).getlat());
        locationB.setLongitude(objarray.get(j).getlon());

        float distance = locationA.distanceTo(locationB);

        if((distance < 600)&&(distance > 0.0) )
        {
            Toast.makeText(getApplicationContext(),"You can go to" +objarray.get(j).gettitle(),Toast.LENGTH_SHORT).show(); 

        }

    }

此方法中的所有内容都是静态的,唯一给我错误的是 Toast.makeText 调用。我需要向包含 scan 方法的 class1 传递一些东西吗?

像这样:

Class1.Scan(something);

我认为这可能与 Toast 中的 getApplicationContext() 有关,但我不确定我需要做什么才能解决此问题。任何解释表示赞赏!

【问题讨论】:

  • 您的错误信息到底是什么?请发布您的 logcat,以便我们提供帮助。
  • 如果它是 NullhPointer 异常,那么我会说 objarray.get(j).gettitle() 这不是静态的,你也错了,使用 getApplicationContext 尝试将当前活动的上下文传递给 Toast。
  • 正如一些答案所暗示的那样,即使您说“此方法中的所有内容都是静态的”,但显然并非如此。 getApplicationContext() 不是。虽然下面的一些答案解决了您的直接问题,但请考虑static methods are often an indicator of deeper problems in the design
  • 感谢歌舞子的建议!!!

标签: android static-methods


【解决方案1】:

我是否需要向包含 scan 方法的 class1 传递一些东西?

是的,您需要将当前 Activity 上下文传递给 Scan 方法以显示 Toast,而不是直接调用 Class1 中的 getApplicationContext() 方法(来自非 Activity 类)。将扫描方法更改为:

public static void Scan(Context context) {
   //...your code here....
    Toast.makeText(context,"You can go to"  
                  +objarray.get(j).gettitle(),Toast.LENGTH_SHORT).show(); 

    }

【讨论】:

  • 嗯,有道理,谢谢!那么第二类中的方法调用会是什么样子,像这样: Class1.Scan(Context context);谢谢!!
  • @deucalion0 :从 Class2 调用 Scan 方法为:Class1.Scan(getApplicationContext()); 或者如果类 Class2 是一个活动,那么 Class1.Scan(Class2.this);
  • 感谢您的帮助,class2 扩展了 BroadCastReceiver,当我使用 Class1.Scan(getApplicationContext()) 时,我收到此错误“方法 getApplicationContext() 未定义为 ProximityIntentReceiver 类型”。知道为什么吗?谢谢!
  • @deucalion0:如果 class2 扩展了 BroadCastReceiver,那么您将上下文作为 o​​nRecive 方法中的第一个参数?只需将其传递为 Class1.Scan(context) 而不是 getApplicationContext()
  • 现在修复它我可以成功调用我的方法!非常感谢您对此的帮助!!!
【解决方案2】:

您是否尝试过将应用程序上下文传递给方法? Class1.Scan(getApplicationContext())

public static void scan(Context context) {
    for( int j=0; j< objarray.size();j++)
    {

        locationB.setLatitude(objarray.get(j).getlat());
        locationB.setLongitude(objarray.get(j).getlon());

        float distance = locationA.distanceTo(locationB);

        if((distance < 600)&&(distance > 0.0) )
        {
            Toast.makeText(context,"You can go to" +objarray.get(j).gettitle(),Toast.LENGTH_SHORT).show(); 

        }

    }

【讨论】:

  • 这是我现在正在尝试的,但我收到错误消息:“方法 getApplicationContext() 未定义 ProximityIntentReceiver 类型”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2010-09-24
相关资源
最近更新 更多