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

Java 如何从另一个活动调用非静态函数?,java,android,android-studio,Java,Android,Android Studio,我的代码中有一个我想在其他活动中使用的函数,但我不能使该函数为静态函数,因为每次我添加静态函数时,它都会给我一个错误(错误参考“this”): 'com.example.memorableplacecs.MainActivity。无法从静态上下文中引用此 这是我要使用的代码: protected boolean saveArray() { SharedPreferences sp = this.getSharedPreferences(SHARED_PREFS_NAME, Activit

我的代码中有一个我想在其他活动中使用的函数,但我不能使该函数为静态函数,因为每次我添加静态函数时,它都会给我一个错误(错误参考“this”):

'com.example.memorableplacecs.MainActivity。无法从静态上下文中引用此

这是我要使用的代码:

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();
}
受保护的布尔存储阵列(){
SharedReferences sp=this.getSharedReferences(共享首选项名称、活动.MODE\u私有项);
SharedReferences.Editor mEdit1=sp.edit();
Set=newhashset();
set.addAll(结婚名单);
mEdit1.putStringSet(“列表”,集合);
返回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();
}
    MyApplication application = ((MyApplication)getApplicationContext());
    application.saveArray(params..)

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

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();
}
    MyApplication application = ((MyApplication)getApplicationContext());
    application.saveArray(params..)

从另一个活动调用方法是没有意义的,因为一次只能调用一个活动

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

并在其中添加静态方法

然后在活动中,您可以这样称呼它:

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();
}
    MyApplication application = ((MyApplication)getApplicationContext());
    application.saveArray(params..)

从另一个活动调用方法是没有意义的,因为一次只能调用一个活动

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

并在其中添加静态方法

然后在活动中,您可以这样称呼它:

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();
}
    MyApplication application = ((MyApplication)getApplicationContext());
    application.saveArray(params..)

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

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

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();
}
publicstaticbooleansavearray(最终上下文,最终列表数据){
final SharedPreferences sp=context.getSharedPreferences(共享\首选\名称,活动.模式\私有);
最终SharedReferences.Editor=sp.edit();
最终集=新的HashSet();
set.addAll(数据);
编辑器.putStringSet(“列表”,set);
返回editor.commit();
}

请注意,由于它被声明为静态的,您不再需要在活动类中使用此方法。最好将其移动到专用的帮助器类中。

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

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

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();
}
publicstaticbooleansavearray(最终上下文,最终列表数据){
final SharedPreferences sp=context.getSharedPreferences(共享\首选\名称,活动.模式\私有);
最终SharedReferences.Editor=sp.edit();
最终集=新的HashSet();
set.addAll(数据);
编辑器.putStringSet(“列表”,set);
返回editor.commit();
}

请注意,由于它被声明为静态的,您不再需要在活动类中使用此方法。最好将其移动到专用的帮助器类中。

您不能直接调用另一个活动上的活动实例方法您不能直接调用另一个活动上的活动实例方法