私は何とかAndroidスタジオにあるmethod invocation may produce nullPointerexception
の警告をすべてカバーしようとしています。アクティビティを再起動して、nullPointerExceptionを処理するように練習してください。
私はこの問題に関する多くの話題を読んでおり、可能な例外を処理するためのベストプラクティスは、オブジェクトの値(nullまたはnot null)をチェックすることであるという結論に達しました。
にもかかわらず(理論上は)以下の私の例では、オブジェクトがnull値持っていることはありません:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
を私はまだAndroidのメーカーは、次の行がNullPointerException
を引き起こす可能性があることを警告します:
mCurrentUser = user.getUid();
私は、user
が実際にnull
になることができる孤立したケースが考えられました。これは、私が書いたコードではありません。 (非常に低い可能性:Firebaseが何らかの形で私のユーザの検索に失敗するとしよう)。 ユーザーの価値をチェックしたにもかかわらず、彼が実際にnullになる場合、私のコードはどのように実行されるのですか?それをデフォルト値にすることはできますか?
私はできません。デフォルト値を与えると、その実際のユーザーに関するデータベースデータを読み取ろうとすると災害が発生します。
私は「(user
を取得する全体のプロセスが再び行われることになるように)トーストを表示し、活動を再開することによって回避策を試みた
if(user != null)
{
mCurrentUser = user.getUid();
}
else{
Toast toast = Toast.makeText(getBaseContext() , "Oops, something went wrong!" , Toast.LENGTH_LONG);
toast.show();
finish();
startActivity(getIntent());
}
しかし、私は私の解決策は、にISNことはかなり怖いですベストプラクティス。 このようなイベントをよりうまく処理するにはどうすればよいですか?
通常、このような状況では、ユーザーにログイン画面を提示する必要があります(ある場合)。また、失敗したアクションを繰り返すために(例えばアラート経由で)提供することもできます。繰り返し試行すると成功する可能性があります。 – algrid