2016-11-17 7 views
1

Я использую эти строки кода (я использую библиотеку picasso) для загрузки изображения и загрузки его на задний план моего RelativeLayout.Android studio Picasso загрузчик не работает после первого запуска приложения

Target target = new Target() { 
@Override 
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
    relative_layout.setBackground(new BitmapDrawable(getResources(), bitmap)); 
    } 
@Override 
public void onBitmapFailed(Drawable errorDrawable) { 
relative_layout.setBackgroundResource(R.drawable.blolo); 
} 
@Override 
public void onPrepareLoad(Drawable placeHolderDrawable) { 
relative_layout.setBackgroundResource(R.drawable.blolo); 
} 
}; 
Picasso.with(this) 
.load("http://i.imgur.com/D3IBDDS.jpg") 
.into(target); 

Дело в том, что когда я запускаю приложение с помощью своего эмулятора в первый раз, все работает нормально. Проблема в том, что в следующий раз, когда я запустил приложение, он никогда не будет работать, фон никогда не изменится. Я могу заверить вас, что я ничего не меняю в коде. Я просто снова запустил приложение. Однако, если я изменю одну строку кода, например, я делаю некоторые комментарии, например: // blah blah и если я нажимаю run он работает снова, даже если комментарии не имеют функциональности. И, как и раньше, если я снова нажимаю приложение, не изменяя код, фон никогда не изменяется. Есть ли какая-нибудь ошибка или меня преследуют?

EDIT: после некоторых logchat выходов я обнаружил, что я в первый раз запустить приложение, то logchat показывает, что onBitmapLoaded() работает и все работает отлично. В других случаях я запускаю приложение logchat, которое показывает, что onPrepareLoad() запускает и устанавливает фон на мой заполнитель из-за этой проблемы. W/Settings: настройка airplane_mode_on переместилась с android.provider.Settings.System на android.provider.Settings.Global , возвращающее значение только для чтения.

ответ

1

Я наконец нашел ответ. Я думал, что с помощью кодировки, которую я уже сделал, объект Target не будет считаться мусором. К сожалению, я ошибся, и мне пришлось добавить эту строку кода, чтобы сделать ее стабильной и правильной. Я добавляю его здесь для других, у кого такая же проблема, как у меня:

relative_layout.setTag(target); 
0

Убедитесь, что у вас включен Instant Run, так как это, как известно, вызывает проблемы с неправильным обновлением кода.

Если вы все еще сталкиваетесь с проблемой, перейдите на страницу File -> Invalidate Caches/Restart..., а затем перезапустите Android Studio.

+0

Нет, я сделал их оба. Первый не работает вообще. А второй работает только в первый раз, когда запускается приложение. –

0

Используйте AQuery это лучший для извлечения/загрузки изображения из URL во время выполнения

уровня приложения Gradle запись ** компилировать «com.googlecode.android-запрос: Android-запрос: 0,24. ** 3'

Как использовать:

ImageView img= (ImageView) findViewById(R.id.image); 

    AQuery aQuery = new AQuery(img); 

    aQuery.id(img).image("http://i.imgur.com/D3IBDDS.jpg",true, true); 

Во втором аргументе два булевых значений обозначает кэш файлов и кэш-памяти, если использовать вид изображение с ame URL-адрес второй раз, после чего загрузка не будет снова и снова, он будет использовать одинаковое изображение из кеша.

  1. Fast
  2. Простого
  3. простого в использовании
  4. Он имеет много особенности как кэш-памяти и кэш-файл, по умолчанию изображение в без ответа сервера, вы можете использовать Progress Bar, пока изображение не занимает много времени, чтобы загрузить, быстрое отражение в ListView и RecyclerView.
+0

Ну, я не хочу загружать картинку для изображения.Пикассо отлично работает с пикассо для меня. Я хочу загрузить рис и установить его в качестве фона RelativeLayout. В этом случае я должен загрузить pic и поместить его в bitmapDrawable, как и в строках кода выше. Именно по этой причине мне нужно пикассо. –

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