java - 从java中的另一个类访问变量

标签 java android

我有这样一个类:

MainActivity.java

public class MainActivity extends FragmentActivity {
     /* I removed other methods */

     public Map<String, Conversation> conversationsMap = new LinkedHashMap<>();
}

Connection.java

public class Connection {
/* I removed other methods */

     public class TestMessageListener implements MessageListener {  
           MainActivity mainClass;

           public void someMethod() {
                mainClass.conversationsMap.get("test"); /// This line is returning nullpointer exception
           }
     }
}

为什么我不能从另一个类访问 conversationsMap

最佳答案

MainActivity mainClass; 是嵌套类 TestMessageListener 的一个字段,因此如果您不初始化它,它将使用默认值初始化,引用为 null 这意味着

mainClass.conversationsMap.get("test");

将尝试在 null 上调用 conversationsMap.get("test"),但由于 null 没有任何字段或方法,您将收到 NullPointerException。

通常要解决此类问题,您可以使用新实例自己初始化 mainClass

MainActivity mainClass = new MainActivity();

但可能更好的选择是让用户或其他进程将已创建的实例传递给 TestMessageListener 类。为此,您可以创建 setter,

public void setMainActivity(MainActivity mainClass){
    this.mainClass = mainClass;
}

或者在TestMessageListener构造函数中接受MainActivity

public TestMessageListener(MainActivity mainClass){
    this.mainClass = mainClass;
}

我不是 Android 开发人员,所以他们可以提供更好的方法,比如从某种已注册的 Activity 容器中获取此实例,但在这种情况下我帮不了你。

关于java - 从java中的另一个类访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681826/

相关文章:

java - 将Bundle的内容打印到Logcat?

java - 由于 web.xml,内容未显示在 profile.jsp 上?

Java Integer.MIN_VALUE 的负数然后比较产生两个负数

android - Travis CI Android 测试 : no connected devices

android - Facebook 广告延迟深度链接在 Android 应用程序链接数据中不起作用始终为空

android - 如何在 Android RelativeLayout 中拖放 View

Java 和 JSP - 将 .class 放在首选目录中?

android - Qt 5.2 和 Android 错误

安卓工作室 : Could not resolve com. google.code.gson :gson:2. 7

java - 如何在java中更新xml文件