Форум программистов, компьютерный форум CyberForum.ru

ImageView - загрузка картинки из SDCARD - Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Sanu0074
 Аватар для Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,186
Записей в блоге: 5
04.08.2013, 14:52     ImageView - загрузка картинки из SDCARD #1
Написал класс который отображает в ImageView картинку которая лежит в SDCARD.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class ShowPictureInSD {
 
    public static String ROOT_DIR="mydir";
    
    public Bitmap ShowPicture(String fileName, String contentType, String id, ImageView pic) { 
        File dir = new File(Environment.getExternalStorageDirectory() + File.separator + ROOT_DIR + File.separator + contentType + File.separator + id); 
        dir.mkdirs();
       
        File f = new File (dir,  fileName+".png");
        Log.d("ShowPictureInSD", "Поиск картинки: "+f.getAbsolutePath());
        if (f.exists()){
            Bitmap bm = BitmapFactory.decodeFile(f.getAbsolutePath());
            pic.setImageBitmap(bm);
        }else{
            Log.d("ShowPictureInSD", "Картинка ненайдена!");
            return null;
        }
        return null;
    } 
}
Все проверял, путь к файлу в порядке, формирование Bitmam - нет ошибки....
Ошибка возникает на этом шаге: pic.setImageBitmap(bm);

Вот лог:
Код
07-17 04:28:54.488: D/ShowPictureInSD(23003): Поиск картинки: /mnt/sdcard/HomeAndroid/app/1806/1371276396440921M.png
07-17 04:28:54.618: D/dalvikvm(23003): GC_CONCURRENT freed 224K, 4% free 8212K/8519K, paused 152ms+22ms, total 251ms
07-17 04:28:54.628: D/dalvikvm(23003): WAIT_FOR_CONCURRENT_GC blocked 37ms
07-17 04:28:54.688: W/dalvikvm(23003): threadid=12: thread exiting with uncaught exception (group=0x40a13300)
07-17 04:28:54.738: E/AndroidRuntime(23003): FATAL EXCEPTION: Thread-3679
07-17 04:28:54.738: E/AndroidRuntime(23003): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4609)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:835)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:292)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.widget.ScrollView.requestLayout(ScrollView.java:1419)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.view.View.requestLayout(View.java:15129)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.widget.ImageView.setImageDrawable(ImageView.java:401)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at android.widget.ImageView.setImageBitmap(ImageView.java:416)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at com.net.homeandroid.ShowPictureInSD.ShowPicture(ShowPictureInSD.java:23)
07-17 04:28:54.738: E/AndroidRuntime(23003): 	at com.net.homeandroid.Main$1.run(Main.java:89)
В чем здесь проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 14:52     ImageView - загрузка картинки из SDCARD
Посмотрите здесь:

Ждать, пока смонтируется sdcard Android
Android Загрузка картинки
Android Загрузка картинки на сервер
Загрузка картинки из Ethernet-а в imageview Android
Android Загрузка картинки на сервер
Android Загрузка в ImageView картинки по ссылке в отдельном потоке. Исправить код
Загрузка желаемой картинки из файловой системы Android
Android Узнать ширину и высотку картинки в ImageView, которая загружена в android:src
Загрузка текста и картинки в listView с AsyncTask Android
Android Загрузка картинки из ресурсов в Bitmap. Android 4.1.1
Отображение картинки в ImageView полученной из ссылки Android
Загрузка изображения в imageview Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.08.2013, 14:57     ImageView - загрузка картинки из SDCARD #2
Only the original thread that created a view hierarchy can touch its views.
Sanu0074
 Аватар для Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,186
Записей в блоге: 5
04.08.2013, 15:09  [ТС]     ImageView - загрузка картинки из SDCARD #3
Цитата Сообщение от V0v1k Посмотреть сообщение
Only the original thread that created a view hierarchy can touch its views.
Если тут сделать так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
        if (f.exists()){
            
            
            
            ((Object) activity).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Bitmap bm = BitmapFactory.decodeFile(f.getAbsolutePath());
                    pic.setImageBitmap(bm);
                  }
               });
            
        }
То он рагуется на runOnUiThread и pic
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.08.2013, 15:35     ImageView - загрузка картинки из SDCARD #4
Цитата Сообщение от Sanu0074 Посмотреть сообщение
((Object) activity)
зачем здесь Object?
Цитата Сообщение от Sanu0074 Посмотреть сообщение
и pic
наведите курсор на ошибку, будут варианты решения, нужно объявлять pic как final
Sanu0074
 Аватар для Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,186
Записей в блоге: 5
04.08.2013, 17:28  [ТС]     ImageView - загрузка картинки из SDCARD #5
Цитата Сообщение от V0v1k Посмотреть сообщение
зачем здесь Object?

наведите курсор на ошибку, будут варианты решения, нужно объявлять pic как final
Вот переделал класс:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class ShowPictureInSD {
    
    public String ROOT_DIR="HomeAndroid";
    public String fileName;
    public String id;
    public String contentType;
    final ImageView pic;
    public Context activity;
    
    public ShowPictureInSD(String fileName, String contentType, String id, ImageView pic, Context activity){
        this.fileName=fileName;
        this.id=id;
        this.contentType=contentType;
        this.pic=pic;
        this.activity=activity;
        ShowPicture();
    }
 
    
    public Bitmap ShowPicture() { 
        File dir = new File(Environment.getExternalStorageDirectory() + File.separator + ROOT_DIR + File.separator + contentType + File.separator + id); 
        dir.mkdirs();
       
        final File f = new File (dir,  fileName+".png");
        Log.d("ShowPictureInSD", "Поиск картинки: "+f.getAbsolutePath());
        if (f.exists()){
            //Bitmap bm = BitmapFactory.decodeFile(f.getAbsolutePath());
            //pic.setImageBitmap(bm);
            
            
            ((Object) activity).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Bitmap bm = BitmapFactory.decodeFile(f.getAbsolutePath());
                    pic.setImageBitmap(bm);
                  }
               });
            
            
        }else{
            Log.d("ShowPictureInSD", "Картинка ненайдена!");
            return null;
        }
        return null;
    } 
}
Теперь runOnUiThread, когда наводиш предлагает: "change cast of activity"

Если делать так: ((Object) activity).runOnUiThread(new Runnable(){... то ошибка таже остается..

Добавлено через 11 минут
Еще так переделал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
 if (f.exists()){
            new Thread() {  
                @Override
                public void run() {
 
 
                    Bitmap bm = BitmapFactory.decodeFile(f.getAbsolutePath());
                    pic.setImageBitmap(bm);
                    
                  
                }
            }.start();
        }
Но в логах - та же ошибка... незнаю уже что делать?
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.08.2013, 17:34     ImageView - загрузка картинки из SDCARD #6
у вас
Цитата Сообщение от Sanu0074 Посмотреть сообщение
Java
1
Context activity;
а должно быть
Java
1
Activity activity;
Yandex
Объявления
04.08.2013, 17:34     ImageView - загрузка картинки из SDCARD
Ответ Создать тему
Опции темы

Текущее время: 21:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru