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

Загрузка и отображение большого количества картинок с памяти телефона - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Position в ListView после addTextChangedListener http://www.cyberforum.ru/android-dev/thread1144474.html
ПРивет! в чем соль... у меня ListView с определенными item, при клике на них, появляется окно с определенной информацией. какую именно информацию отображать я определяю так: я передаю позицию кнопки...
Программирование Android Пространство имён чуть ниже часть кода игры, и меня интересует в нём переменная game. game является аргументом конструктора класса, и потом к этому аргументу обращаются из другого метода этого класса: import... http://www.cyberforum.ru/android-dev/thread1144374.html
Построение графиков и диаграмм Программирование Android
Здравствуйте. Подскажите, как строить диаграммы и графики. Может, есть в сети какие-нибудь обучающие уроки по этому? Желательно на русском.
Белый фон при прокрутке listview и actionbar в android 2.1 Программирование Android
При прокрутке ListView на Android 2.3 появляется белый фон. Ставил Cache Color Hint на прозрачный или на цвет фона, не помогает. Как это исправить? И еще вопрос: как с помощью support library v7...
Программирование Android Небольшой поиск в приложении http://www.cyberforum.ru/android-dev/thread1143983.html
Здравствуйте всем) Задумал как-то сделать небольшое приложение, поиск погоды, просто так.Так от главный вопрос возник, как организовать сам поиск? Наклепал кое что, как обычно: import...
Программирование Android Поворот imageView на заданный угол народ! как можно повернуть imageView на заданный угол? подробнее

Показать сообщение отдельно
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
13.04.2014, 17:05  [ТС]
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
public class photosScreen_1 extends Fragment {  
    private static photosScreen parentA;
    public View myView = null;
    private static int pictureScale = 0;
    public List<SoftReference<ImageView>> images; 
    public List<SoftReference<Bitmap>> ref;
    
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        myView = inflater.inflate(R.layout.photos_screen_1, container, false);
        parentA =  (photosScreen)getActivity();
        
        ref = new ArrayList<SoftReference<Bitmap>>();
        images = new ArrayList<SoftReference<ImageView>>();
        for (int i=0;i<parentA.links.length;i++) {
            ref.add(new SoftReference<Bitmap>(null));
            images.add(new SoftReference<ImageView>(null));
        }
        GridView grid = (GridView)myView.findViewById(R.id.grid);
        grid.setAdapter(new ImageAdapter(parentA));
        return myView;  
    }
      
  public class ImageAdapter extends BaseAdapter {
        private Context mContext;
 
        public ImageAdapter(Context c) {
            mContext = c; 
        }
 
        public int getCount() {
            return images.size();
        }
 
        public Object getItem(int position) {
            return images.get(position).get();
        }
 
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {         
            try {
                if (images.get(position).get() == null) {
                    images.set(position, new SoftReference<ImageView>(new ImageView(mContext))
                                }
                Bitmap bitmap = ref.get(position).get();
                if (bitmap != null) {
                    images.get(position).get().setImageBitmap(bitmap);
                } else {
                    new AsyncImageLoader(parentA,position).execute(parentA.links[position]);
                }
            } catch(Exception e) { }
            return images.get(position).get();
        }
 
    }
    
    public class AsyncImageLoader extends AsyncTask<String, Integer, Bitmap> {    
        private Context mContext = null;
        private int pos = 0;
        public AsyncImageLoader(Context cont, int po) {
            mContext = cont;
            pos = po;
        }
        protected Bitmap doInBackground(String... params) {
            Bitmap bitmap = ref.get(pos).get();
            if (bitmap == null) {
                Cursor cursor = //загрузка из памяти
                if (cursor != null) 
                    if (cursor.getCount() > 0) {
                        cursor.moveToFirst();
                        bitmap = // загрузка картинки из памяти
                        ref.set(pos, new SoftReference<Bitmap>(bitmap));
                    } 
                cursor.close();
            }          
            return bitmap;//parentA.btms.get().get(pos);
        }
 
 
        @Override
        protected void onPostExecute(Bitmap result) {
            try {
                images.get(pos).get().setImageBitmap(result);   
            } catch (Exception e) { }
        }
    }
  
}
лишнее поудалял

вот так все работает(с большим количеством картинок в том числе), вот только если не прокручивать грид быстро-быстро
если прокручивать очень быстро(видимо оно не успевает загружать-удалять), то вываливается с ошибкой
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
04-13 15:46:03.547: E/AndroidRuntime(15932): FATAL EXCEPTION: main
04-13 15:46:03.547: E/AndroidRuntime(15932): java.lang.NullPointerException
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.widget.GridView.setupChild(GridView.java:1249)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.widget.GridView.makeAndAddView(GridView.java:1225)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.widget.GridView.makeRow(GridView.java:268)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.widget.GridView.fillDown(GridView.java:221)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.widget.GridView.fillGap(GridView.java:188)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:3452)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2950)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.os.Handler.handleCallback(Handler.java:587)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.os.Looper.loop(Looper.java:150)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at android.app.ActivityThread.main(ActivityThread.java:4385)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at java.lang.reflect.Method.invokeNative(Native Method)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at java.lang.reflect.Method.invoke(Method.java:507)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
04-13 15:46:03.547: E/AndroidRuntime(15932):    at dalvik.system.NativeStart.main(Native Method)
подскажите как это разрулить

Добавлено через 1 час 12 минут
поправил это, написав небольшой кеш
мб кому пригодится,выложу код
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
private class Cache {
        private List<SoftReference<Bitmap>> ref;
        private int[] relation;
        private int u,c;
        public Cache(int size) {
            u = size;
            c = 0;
            ref = new ArrayList<SoftReference<Bitmap>>();
            relation = new int [u];
            for (int i=0;i<u;i++) {
                ref.add(new SoftReference<Bitmap>(null));
                relation[i]= -1;
            }
        }
        public Bitmap get(int position) {
            for (int i=0;i<u;i++) {
                if (relation[i]==position) {
                    return ref.get(i).get();
                }
            }
            return null;
        }
        
        public void set(int position, Bitmap btm) {
            for (int i=0;i<u;i++) {
                if (relation[i] == position) {
                    return;
                }
            }
            relation[c] = position;
            ref.set(c, new SoftReference<Bitmap>(btm));
            c++;
            if (c>=u) c = 0;
        }
        
        
    }
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru