2016-06-16 4 views
0

Я пытаюсь загрузить изображение из uri, полученного с помощью FirebaseUi, поэтому я могу установить это изображение в headerView в макете навигационного ящика.Скачайте изображение с URI android с кешем

Я хочу иметь кэш, поэтому его нужно загрузить только после фото, а затем просто использовать фотографию кеша.

FirebaseAuth auth = FirebaseAuth.getInstance(FirebaseApp.getInstance()); 
    if (auth.getCurrentUser() != null) { 
     View hview = navigationView.getHeaderView(0); 

     String personName = auth.getCurrentUser().getDisplayName(); 
     String personEmail = auth.getCurrentUser().getEmail(); 
     String personId = auth.getCurrentUser().getUid(); 
     Uri personPhoto = auth.getCurrentUser().getPhotoUrl(); 


     if (personPhoto != null){ 
      ImageView imgView = (ImageView) hview.findViewById(R.id.header_imageView); 
      // Download photo and set to image 
     } 
    } 
+0

А в чем вопрос? Есть что-то, что не работает должным образом? – m02ph3u5

+0

Я рекомендую использовать UniversalImageLoader – EliaszKubala

+0

@ m02ph3u5 вопрос в том, как я могу скачать изображение – androidjunior

ответ

0

Вы можете использовать библиотеку Пикассо, который автоматически кэширует изображения.

Сначала добавьте библиотеку build.gradle вашего приложения:

compile 'com.squareup.picasso:picasso:2.5.2' 

Затем используйте его для загрузки и отображения изображения:

FirebaseAuth auth = FirebaseAuth.getInstance(FirebaseApp.getInstance()); 
if (auth.getCurrentUser() != null) { 
    View hview = navigationView.getHeaderView(0); 

    String personName = auth.getCurrentUser().getDisplayName(); 
    String personEmail = auth.getCurrentUser().getEmail(); 
    String personId = auth.getCurrentUser().getUid(); 
    Uri personPhoto = auth.getCurrentUser().getPhotoUrl(); 


    if (personPhoto != null) { 
     ImageView imgView = (ImageView) hview.findViewById(R.id.header_imageView); 
     // Download photo and set to image 
     Context context = imgView.getContext(); 
     Picasso.with(context).load(personPhoto).into(imgView); 
    } 
} 
0

Попробуйте создать растровый объект с Ури и кэширование растрового

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), personPhoto); 

Для кэширования растрового изображения читать эту статью Caching Bitmaps

+0

уже пробовал и не работал – androidjunior

1

Вы можете использовать Пикассо (http://square.github.io/picasso/) для загрузки и кэширования изображений.

Picasso.with(context) 
.load("https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150") 
.placeholder(R.drawable.image_name_default) 
.error(R.drawable.image_name_error) 
.into(imageView); 

Это образец для загрузки изображения, а также передача заполнитель, который будет загружен до изображения получает загружено и изображение ошибки, если загрузка не удается.

Есть много других конфигураций позволили таким как память размера кэша, диска размера кэша, размера, повторите попытку с помощью HTTP-перехватчик и лучше всего один отладка включена, который показывает, если изображение загружается из кэша или из сети (setIndicatorsEnabled (правда,)).

0

Лучше использовать библиотеку picasso для загрузки и кеширования изображений.

https://github.com/square/picasso

Для загрузки и кэширования нужно просто закодировать одну строки -

Picasso.with(getApplicationContext()).load(imageURL).placeholder(R.drawable.place_holder).into(imageView); 

Надеется, что это будет работать :)

Смежные вопросы