2016-03-04 1 views
0

Я использую Пикассо «the below code» для загрузки изображений в моем приложении и его работы штрафа до маркера получить истекает,Picasso маркер обновления для одноплодной например

и когда им получить новый маркер им пытаются вызвать ConfigurePicasso снова обновить токен

но я получаю исключение Singleton instance already exists его еще один способ обновить токен для экземпляра singleton ?.

public class MyApplication extends Application { 

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

    public static void ConfigurePicasso(Context context){ 
     try { 
      if (!TextUtils.isEmpty(ConfigurationRow.getInstance(context.getApplicationContext()).getAuthToken())) { 
       OkHttpClient picassoClient = new OkHttpClient(); 
       picassoClient.interceptors().add(new TokenInterceptor(ConfigurationRow.getInstance(context.getApplicationContext()).getAuthToken())); 
       File Cachefile = CacheUtils.CacheDir(context.getApplicationContext()); 
       picassoClient.setCache(new com.squareup.okhttp.Cache(Cachefile, CacheUtils.CacheSize(Cachefile))); 
       Picasso picasso = new Picasso.Builder(context.getApplicationContext()).listener(new Picasso.Listener() { 
        @Override 
        public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 

        } 
       }).downloader(new OkHttpDownloader(picassoClient)).build(); 
       Picasso.setSingletonInstance(picasso); 
      } 
     }catch (Exception e){ 
      e.getMessage(); 
     } 
    } 
} 

ответ

2

Сделайте свои TokenInterceptor изменчивыми и содержать ссылку на него, где вы хотите. Установите маркер на нем, когда это необходимо.

Что-то вроде:

final class TokenInterceptor implements Interceptor { 
    private volatile String someAuthToken = null; 

    void setSomeAuthToken(String someAuthToken) { 
    this.someAuthToken = someAuthToken; 
    } 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
    Request request = chain.request().newBuilder().addHeader("some-auth-header", someAuthToken).build(); 
    return chain.proceed(request); 
    } 
} 
+0

, как осуществить это? – steevoo

+0

@steevoo Похоже, у вас есть основы, готовые к работе; было ли что-то конкретное, что я могу прояснить? –