Передача сложного объекта между activities и fragments Android

Есть класс DiaryAPI, который хранит в себе OkHttpClient с куки и токен для общения с api. В приложении две activity: первая LoginActivity отвечает за авторизацию и в ней создается объект DiaryAPI, далее запускается MainActivity которая реализована с помощью NavController(а) и состоит из фрагментов (то есть выставление аргументов для фрагментов нежелательно). Внутри фрагментов мне нужно как то пользоваться DiaryAPI, для этого я создал отдельный класс со статичным полем с ним, но судя по всему этот способ является неправильным.

Процесс авторизации:

        try {
            String login = loginView.getText() != null ?
                    loginView.getText().toString() : "";
            String password = passwordView.getText() != null ?
                    passwordView.getText().toString() : "";
            if (!login.isEmpty() && !password.isEmpty()) {
                StaticRecourses.diaryAPI = new DiaryAPI(login, password);

                SharedPreferencesManager.saveAccountLoginInfo(this, login, password);
                Intent intent = new Intent(this, MainActivity.class);
                startActivity(intent);
                finish();
            } else {
                runOnUiThread(() -> passwordInputLayout.setError("Поля не должны быть пустыми"));
            }
        } catch (DiaryLoginException e) {
            runOnUiThread(() -> passwordInputLayout.setError("Ошибка авторизации"));
        }

MainActivity:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NavHostFragment hostFragment = (NavHostFragment) getSupportFragmentManager()
                .findFragmentById(R.id.fragmentContainerView);
        NavController navController = hostFragment.getNavController();
        BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_nav_view);
        NavigationUI.setupWithNavController(bottomNavigationView, navController);
    }
}

Вопрос: как лучше реализовать обращение к api внутри фрагментов?


Ответы (1 шт):

Автор решения: ЮрийСПб

Вообще такое через DI решается.

Если DI библиотеку затаскивать по к-л причине не хочется - сделайте DiaryAPI синглтоном.

→ Ссылка