3

我在从静态方法调用非静态方法时面临一个大问题。

这是我的代码

Class SMS
{
    public static void First_function()
    {
        SMS sms = new SMS();
        sms.Second_function();
    }

    public void Second_function()
    {
        Toast.makeText(getApplicationContext(),"Hello",1).show(); // This i anable to display and cause crash
        CallingCustomBaseAdapters();    //this was the adapter class and i anable to call this also
    }

我能够调用 Second_function 但无法获取 Toast 和 CallCustomBaseAdapter() 方法,发生崩溃。

我应该怎么做才能解决这个问题?

4

2 回答 2

8
  public static void First_function(Context context)
  {
    SMS sms = new SMS();
    sms.Second_function(context);
  }

  public void Second_function(Context context)
  {
    Toast.makeText(context,"Hello",1).show(); // This i anable to display and cause crash
  }

实现这一点的唯一解决方案是您需要将当前上下文作为参数传递。我只为 Toast 编写了代码,但您需要根据您的要求对其进行修改。

从您的活动First_function(getApplicationContext())等传递上下文。

对于静态字符串

public static String staticString = "xyz";

public static String getStaticString()
{
  return staticString;
}


String xyz = getStaticString();
于 2012-10-09T09:58:44.277 回答
1

你应该有一个上下文的引用。您正在尝试从 SMS 实例中获取应用程序上下文。

我猜您是从 Activity 或 Service 调用 First_function。所以你可以这样做:

Class SMS
{
    public static void First_function(Context context)
    {
        SMS sms = new SMS();
        sms.Second_function(context);
    }

    public void Second_function(Context context)
    {
        Toast.makeText(context,"Hello",1).show(); // This i anable to display and cause crash
        CallingCustomBaseAdapters();    //this was the adapter class and i anable to call this also
    }

然后,从您的活动中:

SMS.First_function(this); //or this.getApplicationContext() 
于 2012-10-09T09:55:41.843 回答