如何从另一个活动调用非静态函数



我的代码中有一个函数,我想在其他活动中使用,但我不能使该函数为静态函数,因为每次添加静态函数时都会出现错误(错误指"this"(:

'com.example.memorableplacecs.MainActivity.this' cannot be referenced from a static context

这是我想要使用的代码:

protected boolean saveArray() {
SharedPreferences sp = this.getSharedPreferences(SHARED_PREFS_NAME, Activity.MODE_PRIVATE);
SharedPreferences.Editor mEdit1 = sp.edit();
Set<String> set = new HashSet<String>();
set.addAll(mArrayList);
mEdit1.putStringSet("list", set);
return mEdit1.commit();
}

感谢您的帮助

您可以将其设置为静态,如下所示:

private final static String SHARED_PREFS_NAME = "your_name";
public static boolean saveArray(Context context, List<Needed_Class> list) {
SharedPreferences sp = context.getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor mEdit1 = sp.edit();
Set<String> set = new HashSet<String>();
set.addAll(list);
mEdit1.putStringSet("list", set);
return mEdit1.commit();
}

和来自活动的呼叫:

PrefsHelper.saveArray(this, list)

从另一个活动调用方法没有意义,因为您一次只处理一个活动。

您可以创建一个应用程序,在清单中注册它。

并在其中添加您的静态方法。

然后在一个活动中,你可以这样称呼它:

MyApplication application = ((MyApplication)getApplicationContext());
application.saveArray(params..)

静态方法存在于类实例的生命周期之外,是类定义本身的一部分,而不是实例。这意味着,当一个方法被声明为静态时,它的执行与Activity或类实例无关,因此它不能访问任何局部变量,也不能使用"来引用实例这个";关键字。

解决方案是将上下文与任何所需数据一起传递到方法中:

public static boolean saveArray(final Context context, final List<Needed_Class> data) {
final SharedPreferences sp = context.getSharedPreferences(SHARED_PREFS_NAME, Activity.MODE_PRIVATE);
final SharedPreferences.Editor editor = sp.edit();
final Set<String> set = new HashSet<String>();
set.addAll(data);
editor.putStringSet("list", set);
return editor.commit();
}

请注意,由于它被声明为静态,因此您不再需要在Activity类中具有此方法。最好将它移到一个专用的助手类中。

最新更新