2012-08-05 4 views
0

У меня есть база данных SQL, из базы данных я получаю строку имени, используя, что мне нужно показать значок в списке. Для этого я следовал два метода, один:Извлечь изображения из папки ресурсов

int id= context.getResources().getIdentifier(path + i.getIcon(),null, null); 

Я нашел этот метод не очень эффективен, так что я следовал какой-то другой метод, т.е.

try { 
      Class res = R.drawable.class; 
      Field field = res.getField(i.getIcon()); 
      drawableId = field.getInt(null); 
      holder.ContactImage.setImageResource(drawableId); 
     } 
     catch (Exception e) { 
      Log.e("MyTag", "Failure to get drawable id.", e); 
      holder.ContactImage.setImageResource(R.drawable.ic_all_contacts_green); 
     } 

Здесь возникает проблема, какое-то время имя значка, которое я получаю из БД, не будет присутствовать в папке «Жесткая», в то время я чувствую, что мой пользовательский интерфейс вялый, если я пытаюсь прокрутить, я пробовал использовать оба метода, упомянутые выше, но я не нашел смысла использовать.

Как преодолеть эту проблему, когда значок отсутствует, первый метод выбрасывает NULL, а второй показывает исключение, но почему это занимает слишком много времени при этом? Как предотвратить медлительность в моем интерфейсе, какие-либо эффективные методы?

+2

Вы не должны использовать API отражения, поскольку он очень медленный. Особенно на Dalvik – nullpotent

+1

Я в замешательстве, что вы пытаетесь сделать. Обычным способом получения идентификатора выталкиваемого в папке 'drawable' является' R.drawable.id_value_of_drawable', где имя файла drawable равно 'id_value_of_drawable.extension'. – DeeV

+0

Hey @AljoshaBre даже в моем телефоне и его медленное :( – Naruto

ответ

0

Для этого я следовал два метода, один

Я бы рекомендовал:

context.getResources().getIdentifier(i.getIcon(), "drawable", context.getPackageName()) 

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

Не просите значок, который не существует. Поскольку вы знаете, во время компиляции точно, какие значки существуют и не существуют, вы вполне можете не просить иконки, которые не существуют.

как предотвратить вялость в моем UI

Traceview Используйте, чтобы выяснить, где именно ваша проблема производительности проживает. Некоторые из них будут в размышлении - используете ли вы это явно или (лучше) использование getIdentifier(), все еще происходит отражение. В идеале вы будете кэшировать результаты вызовов getIdentifier(). Но помимо этого, Traceview поможет определить ваши трудности.

+0

Но я знаю причину, из-за которой возникает медлительность, из-за запроса отсутствующих значков в drawable но для запроса недостающих значков метод getIdentifier делает мой пользовательский интерфейс вялым, почему это так? .. почему они не могут улучшить это? – Naruto

+0

@LLL: «почему это так?» - я понятия не имею, как я никогда не используйте 'getIdentifier()' с недопустимым идентификатором. "почему они не могут улучшить это?" - по-видимому, потому что у них есть более важные вещи. Вы можете узнать основную причину проблемы производительности, а затем внести свой вклад патч к проекту с открытым исходным кодом Android, который улучшает его. – CommonsWare

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