【发布时间】:2017-07-09 00:33:53
【问题描述】:
当我从游戏活动返回到主要活动时,我得到了 NPE。在一个甚至没有被调用的函数中。 (当我试图在该行之前在控制台中写入时,它什么也不做)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.semanticer.unstable.presentation.GameView.showGameBoard(com.example.semanticer.unstable.domain.model.GameBoard)' on a null object reference
at com.example.semanticer.unstable.presentation.GamePresenter.lambda$onCreate$0(GamePresenter.java:23)
这是我想回到主要活动的地方 - 是的,我也尝试过 finish()。
@Override
public void playAgain(View view) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
这是我出错的那一行
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
game = GameImpl.createNew(6, 4);
**view().subscribe(view -> view.showGameBoard(game.getBoard()));**
view().subscribe(view -> view.showCurrentPlayer(Player.FIRST_PLAYER));
view().subscribe(view -> view.showScore(Player.FIRST_PLAYER, Player.SECOND_PLAYER, game));
view().subscribe(view -> view.hideWinnerText());
}
整个项目在 github -> https://github.com/zdenduk/AndroidUnstableAtoms
你可以在这里找到布局 -
/zdenduk/AndroidUnstableAtoms/tree/master/app/src/main/res/layout
这里有源代码->
/zdenduk/AndroidUnstableAtoms/tree/master/app/src/main/java/com/example/semanticer/unstable
感谢您的努力:)
【问题讨论】:
-
我真的不建议使用 lambdas - Java 8 支持仍处于实验阶段。它还大大减少了您可以在这里获得的支持——几乎没有人在 android 标签上使用它。除此之外 - view() 到底是什么?它不是 Android 的一部分,您还没有为我们提供它。但是您的问题肯定会归结为某个未初始化的变量。
-
方法 view() 可以在这里找到:github.com/konmik/nucleus/blob/…
-
我要这么说,我的意思是建设性而非批判性 - 您的代码不可读。使代码如此抽象并在这里滥用 RxJava 的效用为零。需要一两天的时间才能充分了解这里发生的事情来调试它。您要做的就是展示一个游戏板。去做。你所拥有的是一场维护噩梦。
-
@GabeSechan 我在生产中使用来自 retrolambda 的 lambda 至少一年,一切都很好(我认识的每个人也在使用它)。我什至无法想象使用没有 lambda 和方法引用的复杂 rxjava 链。
-
@Than 我会避免复杂的 RxJava 链。 RxJava 有一个地方,但它让你的代码更难调试。在这种情况下,我们将讨论几十行易于阅读和理解的代码,而不是多个库和一个错误,没有人可以轻松地告诉他他的实际问题是什么。
标签: java android android-activity nullpointerexception rx-java