从静态上下文中调用非静态方法

时间:2019-07-27 21:51:13

标签: java android

所以我知道大约有100个关于此主题的主题。是的,我尝试阅读它们,但我终生无法理解Android中上下文的概念:(

我想在另一个活动中从“ MainActivity”调用一个非静态方法。

这是我尝试在其他活动中调用非静态方法的地方:

public void removeSelected() {
        for(A4Dialogpojo item : selectedItems) {
            alCustom.remove(item);
          MainActivity.saveCalData(); //This line gives me the compile error
    }

这是我要从其他活动调用的MainActivty中的非静态方法:

  public void saveCalData(){
        SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
        SharedPreferences.Editor editor9 = sharedPreferences.edit();
    Gson gson = new Gson();
    String json = gson.toJson( HomeCollection.date_collection_arr);
    editor9.putString("task list", json);
    editor9.apply();
    }

有什么想法吗?在这种情况下,如何使用“上下文”?

3 个答案:

答案 0 :(得分:2)

为什么您需要将此方法保留在MainActivity中?如果是通用工具,只需将其放入某个帮助器类(甚至可以是单例),并在两个Activity类中都具有一个实例

另一种方法是将“子活动”的值返回到MainActivity(也考虑使用startActivityForResult方法)并对此正确调用正确的方法做出反应

据我了解,您不应该在Activity实例上进行操作,因为Activity具有其自己的生命周期,并且是独立处理的

答案 1 :(得分:1)

  

是的,我尝试阅读它们,但是我一生无法理解Android中上下文的概念:(

编译器错误消息引用的是“上下文”(英语名词),而不是Context(Android SDK中的Java类)。

  

我想在另一个活动中从“ MainActivity”调用一个非静态方法。

Android并不真正支持。活动彼此独立。

如果这些活动紧密相连,那么它们应该是一项活动,可能有两个片段。或者,使用一个普通的单例对象作为处理数据存储的存储库,每次活动都与该对象进行通信。

答案 2 :(得分:-2)

不创建类的实例就不能调用非常规方法

new MainActivity().saveCalData(); 

当然,您必须考虑正确的实例化方法,您可能没有默认的构造函数等,但是它的OOP基础知识对理解很有用