Я интегрирую insta API при получении токена авторизации onTokenReceived ().
при открытии приложения. Первый раз, когда все работает нормально, но когда я снова вернулся к той же активности после нажатия кнопки «Назад», затем после того как они метод onChanged () внутри onTokenReceived вызывается более двух раз. Я понятия не имею, как решить это. Пожалуйста, помогите мне решить эту проблему.
EditProfileActivity.class
//instantiationg viewmodel
editProfileViewModel = new ViewModelProvider(this).get(EditProfileViewModel.class);
@Override
public void onTokenReceived(String auth_code) {
Log.d(TAG, "onTokenReceived: " + auth_code);
editProfileViewModel.authInit(auth_code);
editProfileViewModel.observe().observe(this, authToken -> {
Log.d(TAG, "onChanged: " + authToken.getAccessToken());
INSTA_TOKEN = authToken.getAccessToken();
Intent intent = new Intent(EditProfileActivity.this,FbAlbumsActivity.class);
intent.putExtra("flag" , true);
intent.putExtra("AuthTokenClass",authToken);
startActivityForResult(intent,INSTA_IMAGE_PIC);
});
}
EditProfileViewModel.class
public class EditProfileViewModel extends ViewModel {
private static final String TAG = "EditProfileViewModel";
private EditProfileRepo mRepo;
private MutableLiveData<AuthToken>data = null;
public void authInit(String code){
if(data != null)
return;
mRepo = EditProfileRepo.getInstance();
data = mRepo.getAccessToken(code);
}
public LiveData<AuthToken> observe(){
return data;
}
}
EditProfileRepo.class
publi c class EditProfileRepo {
private static final String TAG = "EditProfileRepo";
private static EditProfileRepo instance = null;
public MutableLiveData<AuthToken>data = new MutableLiveData<>();
public static EditProfileRepo getInstance(){
if(instance == null)
instance = new EditProfileRepo();
return instance;
}
public MutableLiveData<AuthToken> getAccessToken(String code){
Auth auth = AuthClient.getInstance();
Call<AuthToken> authTokenCall = auth.getAuthToken(Constants.CLIENTID, Constants.CLIENTSECRET, "authorization_code", Constants.REDIRECTURI,
code);
authTokenCall.enqueue(new Callback<AuthToken>() {
@Override
public void onResponse(Call<AuthToken> call, Response<AuthToken> response) {
Log.d(TAG, "onResponse: " + response.body().getAccessToken());
data.setValue(response.body());
}
@Override
public void onFailure(Call<AuthToken> call, Throwable t) {
Log.d(TAG, "onFailure: " + t.getMessage());
}
});
return data;
}
}