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

Картинка из SQLite в ListView - Android

Войти
Регистрация
Восстановить пароль
 
snezhok11
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 27
07.10.2015, 12:02     Картинка из SQLite в ListView #1
Здравствуйте.Есть несколько вопросов.
1 Как отобразить картинки в ListView из SQLite.Если картинки храняться в папке drawable?
2 Какого формата должны храниться ссылки в бд?
Прочитал темы на форуме,но не где так и не описано решение.
Получаю данные из бд через SimpleCursorAdapter,данные в таблице типа id,name,img
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   
   public void onResume() {
        super.onResume();
        // открываем подключение
        db = sqlHelper.getReadableDatabase();
 
        //получаем данные из бд
        userCursor =  db.rawQuery("select * from "+ DatabaseHelper.TABLE, null);
        String[] headers = new String[] {DatabaseHelper.COLUMN_NAME, DatabaseHelper.COLUMN_IMG};
 
        userAdapter = new SimpleCursorAdapter(this, R.layout.item,
                userCursor, headers, new int[]{R.id.text1, R.id.img}, 0);
        header.setText("Найдено элементов: " + String.valueOf(userCursor.getCount()));
        mList.setAdapter(userAdapter);
 
    }
ListView
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <ImageView android:layout_width="55dip"
        android:layout_height="fill_parent"
        android:id="@+id/img"
 
        />
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"
        android:text=""
        android:textSize="18sp">
    </TextView>
</LinearLayout>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex Ziko
 Аватар для Alex Ziko
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 32
07.10.2015, 13:43     Картинка из SQLite в ListView #2
1. Если в ListView нужно отобразить больше чем просто единичный текст, то я бы передавал в кастомный Адаптер коллекцию бинов, одно их полей которых содержало бы int - ссылку на drawable-ресурс; да, и адаптер бы наследовал от BaseAdapter;
2. ссылка - в данном случае не String - , а int - значение, это если нужно получить доступ к внутренней папке drawable.
R.drawable.ic_launcher - это int значение
snezhok11
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 27
07.10.2015, 14:02  [ТС]     Картинка из SQLite в ListView #3
Цитата Сообщение от Alex Ziko Посмотреть сообщение
я бы передавал в кастомный Адаптер
Можете дать пример с выводом картинок из бд?
Alex Ziko
 Аватар для Alex Ziko
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 32
07.10.2015, 16:37     Картинка из SQLite в ListView #4
http://startandroid.ru/en/uroki/vse-...m-svoj-adapter

что то наподобие такого
snezhok11
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 27
07.10.2015, 16:59  [ТС]     Картинка из SQLite в ListView #5
Цитата Сообщение от Alex Ziko Посмотреть сообщение
что то наподобие такого
Вы думаете я не перечитал все эти уроки?
Нет понимания как это все реализовать с бд.
В этом уроке изображения выводяться как раз с SimpleCursorAdapter как у меня.
http://startandroid.ru/ru/uroki/vse-...sorloader.html
Но вот в базу записывается картинка не "название.png" а "2130837563"
Что это за значание 2130837563 и откудо оно береться не понятно.Какие мне писать ссылки на картинки уже в готовую базу тоже не понятно.
Alex Ziko
 Аватар для Alex Ziko
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 32
07.10.2015, 17:19     Картинка из SQLite в ListView #6
image.setImageResource(int resId);

не?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
07.10.2015, 17:19     Картинка из SQLite в ListView #7
snezhok11, это id генерируемое sdk. Можно его использовать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2015, 21:12     Картинка из SQLite в ListView
Еще ссылки по теме:

Картинка в SQLite Android
Android SQLite and ListView. Ввод и вывод данных
Идентификация ListView + SQLite Android
Загрузка данных из SQLite для каждого пункта ListView Android
Android Как записывать данные из SQLite в ListView

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

Или воспользуйтесь поиском по форуму:
snezhok11
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 27
07.10.2015, 21:12  [ТС]     Картинка из SQLite в ListView #8
Цитата Сообщение от YuraAAA Посмотреть сообщение
это id генерируемое sdk. Можно его использовать
Как его использовать?
Пробую подставлять в приложение из урока 136 ссылки вида R.drawable.ic_launcher и ic_launcher и ic_launcher.png и R.drawable.ic_launcher.png картинки не отображаются только по 2130837563.Тоесть получется эти ид можно узнать только при записи в бд из приложения?Тогда это мне не подходит.
Уже устал бороться с этими картинками,три дня гуглю,тем создано куча но решений негде нет.На нерускоязычных сайтах вроде есть,но я непонимаю там ничего.
Вот здесь http://forum.startandroid.ru/viewtopic.php?f=34&t=812 вроде парень отписался,что ему помог код
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 ViewBinder myVB = new ViewBinder() {
                public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
                        if (view.getId() == R.id.foto) {
                                ImageView iv = (ImageView) view;
                                try {
                                        Bitmap bm = BitmapFactory.decodeStream(getAssets().open(cursor.getString(columnIndex)));
                                        iv.setImageBitmap(bm);
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                                return true;
                        }
                        return false;
                }
        };
Но там кратинки храняться в assets да и как его привязать к моему коду я незнаю.
Мой код
Кликните здесь для просмотра всего текста
Javascript
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
91
92
93
94
95
96
97
98
99
100
101
102
package com.metanit.eugene.sqldbapp;
 
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
 
import android.view.View;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ListView;
import android.database.sqlite.SQLiteDatabase;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter;
 
import java.io.IOException;
 
public class Main22Activity extends ActionBarActivity {
 
    ListView mList;
    TextView header;
    DatabaseHelper sqlHelper;
    SQLiteDatabase db;
    Cursor userCursor;
    SimpleCursorAdapter userAdapter;
    SimpleCursorAdapter listAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main22);
 
        header = (TextView)findViewById(R.id.header);
 
        mList = (ListView)findViewById(R.id.list);
        mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 
                Intent intent = new Intent(getApplicationContext(), UserActivity.class);
                intent.putExtra("id", id);
                startActivity(intent);
            }
        });
        sqlHelper = new DatabaseHelper(getApplicationContext());
    }
    @Override
    public void onResume() {
        super.onResume();
        // открываем подключение
        db = sqlHelper.getReadableDatabase();
 
        //получаем данные из бд
        userCursor =  db.rawQuery("select * from "+ DatabaseHelper.TABLE, null);
        String[] headers = new String[] {DatabaseHelper.COLUMN_NAME, DatabaseHelper.COLUMN_IMG};
 
        userAdapter = new SimpleCursorAdapter(this, R.layout.item,
                userCursor, headers, new int[]{R.id.text1, R.id.img}, 0);
        header.setText("Найдено элементов: " + String.valueOf(userCursor.getCount()));
        mList.setAdapter(userAdapter);
 
 
 
 
    }
 
 
 
 
    @Override
    public void onDestroy() {
            super.onDestroy();
            // Закрываем подключения
        db.close();
        userCursor.close();
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
 
        int id = item.getItemId();
 
        if (id == R.id.action_settings) {
 
            Intent intent = new Intent(getApplicationContext(), UserActivity.class);
            startActivity(intent);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
}


Добавлено через 2 часа 23 минуты
Наконец то нашел решение.
1 Создал класс
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public class MyViewBinde implements SimpleCursorAdapter.ViewBinder {
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            if (view.getId() == R.id.img) {
                ImageView iv = (ImageView) view;
                try {
                    Bitmap bm = BitmapFactory.decodeStream(getAssets().open(cursor.getString(columnIndex)));
                    iv.setImageBitmap(bm);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return true;
            }
            return false;
        }
 
 
    }
2 Все картинки перекинул в папку assets
3 В SQLite написал ссылки вида - img.png,img2.gif,img3.jpg
4 Дописал рядом с SimpleCursorAdapter строку
Javascript
1
userAdapter.setViewBinder(new MyViewBinde());
И все заработало.
Полный код
Кликните здесь для просмотра всего текста
Javascript
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.metanit.eugene.sqldbapp;
 
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
 
import android.view.View;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ListView;
import android.database.sqlite.SQLiteDatabase;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter;
 
import java.io.IOException;
 
public class Main22Activity extends ActionBarActivity {
 
    ListView mList;
    TextView header;
    DatabaseHelper sqlHelper;
    SQLiteDatabase db;
    Cursor userCursor;
    SimpleCursorAdapter userAdapter;
    SimpleCursorAdapter listAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main22);
 
        header = (TextView)findViewById(R.id.header);
 
        mList = (ListView)findViewById(R.id.list);
        mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 
                Intent intent = new Intent(getApplicationContext(), UserActivity.class);
                intent.putExtra("id", id);
                startActivity(intent);
            }
        });
        sqlHelper = new DatabaseHelper(getApplicationContext());
 
 
 
 
    }
    @Override
    public void onResume() {
        super.onResume();
        // открываем подключение
        db = sqlHelper.getReadableDatabase();
 
        //получаем данные из бд
        userCursor =  db.rawQuery("select * from "+ DatabaseHelper.TABLE, null);
        String[] headers = new String[] {DatabaseHelper.COLUMN_NAME, DatabaseHelper.COLUMN_IMG};
 
        userAdapter = new SimpleCursorAdapter(this, R.layout.item,
                userCursor, headers, new int[]{R.id.text1, R.id.img}, 0);
        header.setText("Найдено элементов: " + String.valueOf(userCursor.getCount()));
 
        userAdapter.setViewBinder(new MyViewBinde());
        mList.setAdapter(userAdapter);
 
    }
 
    public class MyViewBinde implements SimpleCursorAdapter.ViewBinder {
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            if (view.getId() == R.id.img) {
                ImageView iv = (ImageView) view;
                try {
                    Bitmap bm = BitmapFactory.decodeStream(getAssets().open(cursor.getString(columnIndex)));
                    iv.setImageBitmap(bm);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return true;
            }
            return false;
        }
 
 
    }
 
 
    @Override
    public void onDestroy() {
            super.onDestroy();
            // Закрываем подключения
        db.close();
        userCursor.close();
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
 
        int id = item.getItemId();
 
        if (id == R.id.action_settings) {
 
            Intent intent = new Intent(getApplicationContext(), UserActivity.class);
            startActivity(intent);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
}
Yandex
Объявления
07.10.2015, 21:12     Картинка из SQLite в ListView
Ответ Создать тему
Опции темы

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