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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
#1

ImageView - загрузка картинки из SDCARD - Программирование Android

04.08.2013, 14:52. Просмотров 1842. Ответов 5
Метки нет (Все метки)

Написал класс который отображает в 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
Посмотрите здесь:

Загрузка картинки из Ethernet-а в imageview - Программирование Android
Здравствуйте. Есть код public String grabImageFromUrl(String url, String path) { try { InputStream is =...

Загрузка в ImageView картинки по ссылке в отдельном потоке. Исправить код - Программирование Android
Здравствуйте! Пытаюсь загрузить картинку по ссылке из инета в ImageView в отдельном потоке. Поток реализовывал путем перегрузки метода run,...

Загрузка изображения в imageview - Программирование Android
Всем привет. Возникла проблема, распарсил сайт в arraylist, сохранил в БД, далее мне нужно вывести сайт на активность. Делаю так: ...

Загрузка изображения из интернета в imageview - Программирование Android
Доброго, передаю из одной активити в другую ссылку на картинку, она прямая, как мне ее вывести в imageview?

Отображение картинки в ImageView полученной из ссылки - Программирование Android
Всем привет! Длеаю приложение, которое получет JSON с сервера. Вид его следующий: Где в url хранится абсолютный путь к...

Узнать ширину и высотку картинки в ImageView, которая загружена в android:src - Программирование Android
В ImageView загружена картинка. Нужно узнать ширину. Сколько не пытаюсь у меня выводит ширину равную -1. Использую функцию такую...

Загрузка картинки - Программирование Android
private class loadPic extends AsyncTask<Void, Void, Void> { private String source; private boolean error = false; ...

Загрузка картинки на сервер - Программирование Android
Здравствуйте, такой вопрос. У меня есть php сервер и я хочу чтобы мое приложение отправляло картинку на этот сервер. какой код должен...

Загрузка картинки на сервер - Программирование Android
public void sendMedia(String urlAddr, String filePath) { final String serverAddress = urlAddr; final File file = new...

Загрузка желаемой картинки из файловой системы - Программирование Android
Привет! В общем вопрос таков. Мне необходимо реализовать загрузку изображений, то есть пользователь нажимает на кнопку, открывается...

Загрузка текста и картинки в listView с AsyncTask - Программирование Android
Привет всем. Имеется файл в формате JSON на удалённом сервере. Мне нужно вывести текст из определённых узлов файла и картинки по указанным...

Загрузка картинки из ресурсов в Bitmap. Android 4.1.1 - Программирование Android
Добрый вечер. Дело заключается в следующем: я загружаю картинку из ресурсов (png) в Bitmap таким образом: ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 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
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 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
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.08.2013, 15:35     ImageView - загрузка картинки из SDCARD #4
Цитата Сообщение от Sanu0074 Посмотреть сообщение
((Object) activity)
зачем здесь Object?
Цитата Сообщение от Sanu0074 Посмотреть сообщение
и pic
наведите курсор на ошибку, будут варианты решения, нужно объявлять pic как final
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 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
1158 / 982 / 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
Ответ Создать тему
Опции темы

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