【问题标题】:Calling a method from Activity2 in Activity1在 Activity1 中从 Activity2 调用方法
【发布时间】:2013-04-21 15:44:17
【问题描述】:

我有两个课程/活动:

头等舱:

public class FirstClass extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
  public void addData(String filename, String data); {
    SecondClass second = new SecondClass();
    second.save(name, data);
  }
}

二等:

public class SecondClass extends Activity {
  public void save(String filename, String data) {
    try {
      FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
      fos.write(data.getBytes());
      fos.close();
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

如你所见,我要做的是在FirstClass 中从SecondClass 调用一个方法。该方法将一些数据保存到内部存储中。

这样做的正确方法是什么?我知道我可能应该对Context 做点什么,但我不知道具体是什么。

【问题讨论】:

  • 您不要尝试将活动结合在一起。创建第 3 个类,将方法放入其中并让每个活动调用它。

标签: android class methods android-activity


【解决方案1】:

把它做成一个简单的java类。

public class ThirdClass
{
    public void save(String filename, String data, Context context)
    {
        try {
            FileOutputStream fos = context.openFileOutput(filename,Context.MODE_PRIVATE);
            fos.write(data.getBytes());
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

像在您的第一个活动中一样调用此方法。

ThirdClass third= new ThirdClass();
third.save(name, data,this);

如果您不想参加第三类并想使用第二类,则可以选择。然后将此保存方法设为静态。

public class SecondClass extends Activity
{
    //Oncreate method....

    public static void save(String filename, String data)
    {
        try {
            FileOutputStream fos = openFileOutput(filename,Context.MODE_PRIVATE);
            fos.write(data.getBytes());
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

并从第一个活动中调用此方法。

SecondClass.save(name, data);

【讨论】:

  • 这样做会禁止我使用 FileOutputStream。给出以下错误:方法 openFileOutput(String, int) is undefined for type HighScoreHandler
  • @MeesterPatat,你总是可以将 ApplicationContext 传递给类的构造函数。
  • 谢谢,这就是解决方案。
  • 如果我应用它,我会收到 IllegalArgumentException 错误:文件包含路径分隔符..如何解决这个问题?
【解决方案2】:

save 设为静态方法和/或将其移至其自己的静态类(而非活动)。

因此您可以使用以下方式调用它:

SecondClass.save(name, data);

并将其定义如下:

public static void save(String filename, String data)
{

【讨论】:

    【解决方案3】:

    您应该创建一个名为 SaveHelper 之类的类,它不扩展活动并添加一个静态方法,以便您可以执行以下操作: FileHelper.save(...)

    public class FileHelper {
    public static void save(Context context, String filename, String data) {
    try {
      FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE);
      fos.write(data.getBytes());
      fos.close();
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    

    } }

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      相关资源
      最近更新 更多