1

ゲームアクティビティからメインアクティビティに戻るときにNPEを取得します。呼び出されていない関数でも。私がメインの活動に戻りたい場所ですJava + Android - >新しいアクティビティの開始時にNULLポインタ例外が発生する

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) 

(私はその行の前に、コンソールに書き込もうとしたとき、それは何もしません) - はい私はあまりにも)(仕上がりを試してみました。

@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 /木/マスター/アプリ/ srcに/メイン/ javaの/ COM /例/ semanticer /不安定

はあなたをありがとう努力:)

+1

私は実際にはラムダを使用することを推奨しません.- Java 8のサポートは実験段階です。それはまたあなたがここで得ることができるサポートを大幅に減らします - アンドロイドタグの誰もそれを使用しません。それ以外に、ビュー()は何ですか?それはAndroidの一部ではなく、あなたは私たちのためにそれを提供していません。しかし、あなたの問題はどこかで初期化されていない変数に来ることが確実です。 –

+0

メソッドビュー()はここにあります:https://github.com/konmik/nucleus/blob/249ab08547cb2b10ddce268dfb0b27b5013623c2/nucleus/src/main/java/nucleus/presenter/RxPresenter.java –

+0

私はこれを言うつもりです私はあなたのコードが読めないほど重要ではない建設的であることを意味します。この抽象コードをコード化し、ここでRxJavaを乱用することには全く役に立たない。それをデバッグするためにここで何が起こっているのかを十分に理解するには、1日か2日かかるでしょう。あなたがしようとしているのは、ゲームボードを表示することだけです。それを行う。あなたが持っているものはメンテナンスの悪夢です。 –

答えて

1

は、nullのオブジェクト参照でshowGameBoardがスローされる、つまり「ビュー」という参照はnullと思われます。だから、これはおそらくあなたを助けるかもしれない https://github.com/konmik/nucleus/blob/249ab08547cb2b10ddce268dfb0b27b5013623c2/nucleus/src/main/java/nucleus/presenter/Presenter.java

現在地継承されているビュー変数を見つけることができます

/** 
    * Returns a current view attached to the presenter or null. 
    * 
    * View is normally available between 
    * {@link Activity#onResume()} and {@link Activity#onPause()}, 
    * {@link Fragment#onResume()} and {@link Fragment#onPause()}, 
    * {@link android.view.View#onAttachedToWindow()} and {@link android.view.View#onDetachedFromWindow()}. 
    * 
    * Calls outside of these ranges will return null. 
    * Notice here that {@link Activity#onActivityResult(int, int, Intent)} is called *before* {@link Activity#onResume()} 
    * so you can't use this method as a callback. 
    * 
    * @return a current attached view. 
    */ 
    @Nullable 
    public View getView() { 
     return view; 
} 

Presenter.javaは、基本クラスです。

+0

これは理にかなっているようです。ありがとうございます。<3 –

+0

Great :)この回答を受け入れることを忘れないでください。 –

0

このgenrallyのようなNullPointerExceptionは、未定義の変数の結果です。私はあなたのコードから推測していた場合、私は

game = GameImpl.createNew(6, 4); 

を定義する必要がありますか、適切に定義されていないと言うでしょう

は(私は正確に支援することのいくつかのより多くを必要とするように見えます)。まずそこを見てからそこから行ってみてください。がんばろう! :)

+0

それはgit上、プレゼンテーションフォルダの下にあります:)ありがとうとともに –

+0

エラーはnullオブジェクト参照でONと言います。ただし、showGameBoard()は "game"という参照では呼び出されません。したがって、上記のエラーはこの行に起因するものではありません。 –

+0

ゲームがnullの場合、ビュー参照で呼び出されるshowGameBoard()メソッドに関わらず、getBoard()メソッド(「ゲーム」と呼ばれる)に関してエラーがスローされます。 –

関連する問題