मेरे पास ViewPager
है और ViewPager
एक साथ लोड होने पर तीन webservice कॉल किए जाते हैं।ओकेhttp रीफ्रेश समाप्त हो गया टोकन ताज़ा करें जब सर्वर पर एकाधिक अनुरोध भेजे जाते हैं
पहले एक रिटर्न जब 401, Authenticator
कहा जाता है और मैं Authenticator
अंदर टोकन ताज़ा है, लेकिन शेष 2 अनुरोध पहले से ही पुराने ताज़ा टोकन के माध्यम से सर्वर के लिए भेजा जाता है और 498 जो इंटरसेप्टर में कब्जा कर लिया है और एप्लिकेशन को बाहर लॉग होता है के साथ विफल रहता है।
यह आदर्श व्यवहार नहीं है जिसे मैं उम्मीद करूंगा। मैं कतार में दूसरा और तीसरा अनुरोध रखना चाहता हूं और जब टोकन रीफ्रेश किया जाता है, तो कतारबद्ध अनुरोध को पुनः प्रयास करें।
वर्तमान में, मैं अगर टोकन ताज़ा Authenticator
में चल रही है, उस मामले में, मैं Interceptor
में बाद के सभी अनुरोध को रद्द और उपयोगकर्ता को अपने पृष्ठ को ताज़ा करने है या मैं करने के लिए उपयोगकर्ता और बल उपयोगकर्ता लॉगआउट कर सकते हैं इंगित करने के लिए एक चर है लॉग इन करें।
Android के लिए okhttp 3.x का उपयोग कर उपरोक्त समस्या के लिए एक अच्छा समाधान या आर्किटेक्चर क्या है?
संपादित करें: जिस समस्या को मैं हल करना चाहता हूं वह सामान्य है और मैं अपनी कॉल अनुक्रमित नहीं करना चाहता हूं। यानी एक कॉल को समाप्त करने और टोकन को रीफ्रेश करने का इंतजार करें और फिर केवल गतिविधि और खंड स्तर पर शेष अनुरोध भेजें।
कोड का अनुरोध किया गया था।
public class CustomAuthenticator implements Authenticator {
@Inject AccountManager accountManager;
@Inject @AccountType String accountType;
@Inject @AuthTokenType String authTokenType;
@Inject
public ApiAuthenticator(@ForApplication Context context) {
}
@Override
public Request authenticate(Route route, Response response) throws IOException {
// Invaidate authToken
String accessToken = accountManager.peekAuthToken(account, authTokenType);
if (accessToken != null) {
accountManager.invalidateAuthToken(accountType, accessToken);
}
try {
// Get new refresh token. This invokes custom AccountAuthenticator which makes a call to get new refresh token.
accessToken = accountManager.blockingGetAuthToken(account, authTokenType, false);
if (accessToken != null) {
Request.Builder requestBuilder = response.request().newBuilder();
// Add headers with new refreshToken
return requestBuilder.build();
} catch (Throwable t) {
Timber.e(t, t.getLocalizedMessage());
}
}
return null;
}
}
कुछ सवाल इस के समान: OkHttp and Retrofit, refresh token with concurrent requests
कृपया कुछ कोड पोस्ट करें –
क्या आप अपना प्रामाणिक कोड पोस्ट कर सकते हैं? धन्यवाद। आप अपने एपीआई से 4 9 8 को अपने समाप्त टोकन के साथ क्यों प्राप्त करते हैं? – savepopulation
@ सेवपोप्यूलेशन 498 का अर्थ अमान्य टोकन है। पहले अनुरोध के साथ भेजे गए 2 अनुरोध पुराने टोकन हैं और अनुरोध 498 त्रुटि कोड के साथ विफल रहता है। – sat