Я работаю с Firebase push notification
структурой MVP
с использованием `Dagger2. , поскольку мне нравится кодирование более гибким с лучшей логикой.Значение интерфейса равно null при вызове в MVP с помощью Dagger2
Итак, мой вопрос интерфейс notificationView
я могу только получить null
значение от этого даже я уже установлено notificationView
значения в BaseTopActivity
с помощью Dagger 2
(@Inject BaseTopPresenter
) + MVP
(BaseTopPresenter
)
Пожалуйста, помогите мне рассмотреть чтобы получить notificationView
значение (если не null
),
Спасибо,
р/с: Ниже сведения о файлах.
NotificationView interface
public interface BaseTopView extends BaseView {
interface NotificationView {
void onUpdateNotifications(RemoteMessage remoteMessage, int notifyId);
}
}
Component
@ActivityScope
@Component(dependencies = {AppComponent.class})
public interface Component {
// Activities
void inject(BaseTopActivity activity);
// Services
void inject(FirebaseMsgService service);
}
BaseActivity.java
@ActivityScope
public abstract class BaseActivity extends AppCompatActivity implements BaseView {
/**
* Dagger 2
*/
Component Component;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Dagger 2
Component = DaggerComponent.builder()
.appComponent(MainApplication.getAppComponent(this)).build();
}
}
BaseTopActivity.java
где я установить интерфейс notificationView
значение
@ActivityScope
public abstract class BaseTopActivity extends BaseActivity implements BaseTopView.NotificationView {
@Inject
BaseTopPresenter baseTopPresenter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* Dagger2
*/
getComponent().inject(this);
// notification view : print : Activity Name extend BaseTopActivity
Timber.e(" setView " + notificationView);
// BaseTopPresenter value == [email protected]
baseTopPresenter.setView(notificationView);
}
}
BaseTopPresenter interface
где я установил интерфейс notificationView
значение
public void setView(BaseTopView.NotificationView notificationView) {
// GOT VALUE ALREADY HERE, NOT NULL
Timber.e(BaseTopPresenter.class.getSimpleName() + " setView " + notificationView);
this.notificationView = notificationView;
}
public BaseTopView.NotificationView getView() {
return notificationView;
}
Издание появится в этом файле, где я получаю интерфейс notificationView
значения: FirebaseService.java
public class FirebaseMsgService extends FirebaseMessagingService {
// Dagger2
Component Component;
@Inject
BaseTopPresenter presenter;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
MainApplication applicationContext = (MainApplication) getApplicationContext();
if (applicationContext != null) {
// RUN
Timber.e("onMessageReceived --- inject ");
// Dagger 2
Component = DaggerComponent.builder()
.appComponent(MainApplication.getAppComponent(this)).build();
asukabuComponent.inject(this);
} else Timber.e("applicationContext == null");
// VALUE in getView() IS NULL HERE, NO CRASH WITH PRESENTER
// BaseTopPresenter value == [email protected]
Timber.e("getView " + presenter.getView());
if (remoteMessage != null) sendNotification(remoteMessage);
}
UPDATE: значение BaseTopPresenter отличается. Я думаю, что где-то я вводил Dagger2, это неправильно.
MainApplication.java
public class MainApplication extends Application {
/**
* Dagger 2
*/
private AppComponent appComponent;
/**
* @param context
* @return
*/
public static AppComponent getAppComponent(Context context) {
return ((MainApplication) context.getApplicationContext()).appComponent;
}
@Override
public void onCreate() {
super.onCreate();
// Dagger 2
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.networkModule(new NetworkModule(getString(R.string.base_url)))
.build();
}
}
Вы можете определить «AppComponent» в классе приложений подробнее см. Https://github.com/saveendhiman/SampleApp/blob/master/app/src/main/java/com/sampleapp/base/SampleApplication.java – Saveen
@Saveen: Могу ли я знать, что это значит? Я также обновляю файл u want :) –
Можете ли вы просмотреть мой пример, что вам не хватает – Saveen