Я пытаюсь получить ширину и высоту изображения в android и загрузить соответственно, купите, что мой код ниже работает нормально в 2.3.3, но когда я тестирую в более поздней версии (4.0), его высота и ширина дают исключение нулевого указателя ... мой код ...

           Drawable drawable = null; 
           drawable = LoadImageFromWebOperations(logo_url.replace(" ", "%20"));
           System.out.println("Width" + drawable.getMinimumWidth());
           System.out.println("Height" + drawable.getMinimumHeight()); 
           int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, drawable.getMinimumWidth(), mCtx.getResources().getDisplayMetrics());
           int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, drawable.getMinimumHeight(), mCtx.getResources().getDisplayMetrics());
           client_logo.setMinimumHeight(height);
           client_logo.setMinimumWidth(width);
           client_logo.setImageDrawable(drawable); 


            public Drawable LoadImageFromWebOperations(String url){
System.out.println(url);

    try{
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        return (d);
    }catch (Exception e) {
        //System.out.println("Exc="+e);
        return null;
    }
}
0
user1051599 5 Фев 2013 в 15:39

1 ответ

Лучший ответ

Начиная с API 11, если вы выполняете этот код в потоке пользовательского интерфейса, при доступе к сети будет выдан NetworkOnMainThreadException. Вы не публикуете свой вывод logcat (что было бы очень полезно), но я подозреваю, что это именно то, что происходит. В результате LoadImageFromWebOperations вернет null, и вы получите NPE, когда попытаетесь получить доступ к свойствам для рисования.

Вам нужно запустить этот код в рабочем потоке. См. Статью Обеспечение адаптивности приложения.

0
Ted Hopp 5 Фев 2013 в 15:49