0

多くのクラス (Activity、Fragment、Adapter など) で、オブジェクトにアクセスする必要があります。

だから私はアプリケーションクラスに入れました。(アプリ、ユーザー)

MainAppliction.java

private static MainApplication singleton;

public static MainApplication getApplication() {
    return singleton;
}

@Override
public void onCreate() {
    super.onCreate();
    singleton = this;
}

private UserVo user; // I did not put null value
public UserVo getUser()(...)
public void setUser(UserVo user){...} // Called in LoginActivity

ActivityA.java、ActivityB.java、ActivityC.java

UserVo user;
@Override
public void onCreate(Bundle savedInstanceState) {
    //...
    app = ((MainApplication) getApplicationContext());
    // or app = MainApplication.getApplication();
    user = app.getUser(); // Always Not Null
    //...
}

@Override
public void onResume() {
    user.getData(); // Sometimes NullPointerExeception By GC (Maybe?)
}

Null ポインター例外を防ぐ方法は?

いくつかのアイデアがあると思います。しかし、それらが解決策になるかどうかはわかりません...

1. MainApplication の UserVo ユーザーを Static メンバーに変更する

このように(MainApplication.java)

private static UserVo user;
public static UserVo getUser()(...)

2. UserVo メンバーを使用せずに getUser() を呼び出します

このように (Activity.java)

@Override
public void onResume() {
    MainApplication.getApplication().getUser().getData();
}

3. インターフェースを作る(複雑だ…やりたくない)

このように (MainApplication.java)

interface OnUser {
    void onUser(UserVo user);
}
public void getUser(OnUser onUser) {
    if (user == null)
        // Start Login Activity, and receive UserVo from Server.
    else
        onUser.onUser(user);
}

(Activity.java)

@Override
public void onResume() {
    MainApplication.getApplication().getUser(new OnUser() {
        void onUser(UserVo user) {
            //Do Work.
        }
    });
}

ヒントを教えてください。

4

3 に答える 3