Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
1

Связать базу данных с RecyclerView

16.06.2017, 20:22. Просмотров 1011. Ответов 20
Метки нет (Все метки)

Здравствуйте уважаемые форумчане! Прошу вашей помощи!
У меня есть фрагмент с RecyclerView

Код:
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
package com.starikov.tester;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
 
public class PizzaMaterialFragment extends Fragment {
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
 
        RecyclerView pizzaRecycler = (RecyclerView)inflater.inflate(R.layout.fragment_pizza_material, container, false);
 
        int[] pizzaImages = new int[Pizza.pizzas.length];
        for (int i = 0; i < pizzaImages.length; i++){
            pizzaImages[i] = Pizza.pizzas[i].getImageResourceId();
        }
 
        CaptionedImagesAdapter adapter = new CaptionedImagesAdapter(pizzaImages);
        pizzaRecycler.setAdapter(adapter);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        pizzaRecycler.setLayoutManager(layoutManager);
        return pizzaRecycler;
    }
}
Разметка:
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pizza_recycler"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
Есть класс Pizza:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.starikov.tester;
 
public class Pizza {
 
    private int imageResourceId;
 
    public static final Pizza[] pizzas = {
            new Pizza(R.drawable.formul_electricheskii_zaryad_ydra_atoma),
            new Pizza(R.drawable.formul_simvol_himicheskogo_elementa),
            new Pizza(R.drawable.formul_energia_svyzi_yadra),
            new Pizza(R.drawable.formul_massovoe_chislo),
            new Pizza(R.drawable.formul_defekt_mass)
    };
 
    private Pizza(int imageResourceId) {
        this.imageResourceId = imageResourceId;
    }
 
    public int getImageResourceId() {
        return imageResourceId;
    }
}
Есть CaptionedImagesAdapter:

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
package com.starikov.tester;
 
 
import android.graphics.drawable.Drawable;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.ImageView;
 
class CaptionedImagesAdapter extends RecyclerView.Adapter<CaptionedImagesAdapter.ViewHolder> {
 
    private int[] imageIds;
 
    public static class ViewHolder extends RecyclerView.ViewHolder{
        private CardView cardView;
        public ViewHolder(CardView v){
            super(v);
            cardView = v;
        }
    }
 
    public CaptionedImagesAdapter(int[] imageIds){
        this.imageIds = imageIds;
    }
 
    @Override
    public CaptionedImagesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        CardView cv = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
        return new ViewHolder(cv);
    }
 
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        CardView cardView = holder.cardView;
        ImageView imageView = (ImageView) cardView.findViewById(R.id.info_image);
        Drawable drawable = cardView.getResources().getDrawable(imageIds[position]);
        imageView.setImageDrawable(drawable);
    }
 
    @Override
    public int getItemCount() {
        return imageIds.length;
    }
}
Мне нужно переделать так чтобы RecyclerView брал данные из базы данных а не из простого списка в Pizza.java. Я перерыл гугл, но не разобрался в том что было. Прошу вашей помощи!

Вот код базы данных:
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
package com.starikov.tester;
 
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
public class PizzaDatabaseHelper extends SQLiteOpenHelper{
 
    private static final String DB_NAME = "pizza";
    private static final int DB_VERSION = 1;
 
    PizzaDatabaseHelper(Context context){
        super(context, DB_NAME, null, DB_VERSION);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE FORMULS ("
                + "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                + "IMAGE_RESOURCE_ID INTEGER);");
        insertFormul(db, R.drawable.formul_electricheskii_zaryad_ydra_atoma);
        insertFormul(db, R.drawable.formul_simvol_himicheskogo_elementa);
        insertFormul(db, R.drawable.formul_energia_svyzi_yadra);
        insertFormul(db, R.drawable.formul_massovoe_chislo);
        insertFormul(db, R.drawable.formul_defekt_mass);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
    }
 
    private static void insertFormul(SQLiteDatabase db, int resourceId){
        ContentValues formulValues = new ContentValues();
        formulValues.put("IMAGE_RESOURCE_ID", resourceId);
        db.insert("FORMULS", null, formulValues);
    }
}
Прошу помочь! Приведите полный код, с объяснением, я новичок и не очень сразу все понимаю!
Заранее благодарен!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2017, 20:22
Ответы с готовыми решениями:

Связать базу данных
Добрый вечер! Объясните пожалуйста новичку, как связать веб-сервер с...

Advanced RecyclerView и Expandable RecyclerView
Сделал expandable recycler view на основе advancedRecyclerView сборочки, но не...

Взаимодействие базы данных на SQLlite и Фрагмента и RecyclerView
Доброго времени суток. Суть проблемы в следующем: есть база с некоторым...

RecyclerView внутри recyclerView
Добрый день. Хочу сделать список recyclerView c горизонтальной прокруткой,...

Передача даты в базу данных
как из массива строк и в каком формате записать в бд в столбец типа date дату?

20
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 347
19.06.2017, 15:53 2
Если я правильно понял надо использовать SimpleCursorAdapter. Ему в конструкторе передаешь обьект Сursor, который перемещается по БД в соответсвии с запросами.
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
19.06.2017, 17:46 3
Mr Endless, а вы уверены, что вам нужна база данных? Может просто можно обойтись статическим списком в json?

Добавлено через 2 минуты
Если у вас нет сложных выборок, фильтрации из 200000 элементов, джоинов таблиц по полям, сортировки, то вам и БД незачем.
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
21.06.2017, 09:16  [ТС] 4
Мне нужно будет потом возможность добавлять картинку в избранное, а также поиск по данным из курсора, для этого json подойдет?
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
21.06.2017, 14:50 5
Что именно подразумевается под "добавлять картинку в избранное"? Если ее нужно сохранить, то сохраните ее в файловую систему в своем приложении. Если сохранить урл, название, юзера - то вполне можно json.
Я недавно имел дело с 10мб файлом с городами, которых более 200к. Вычитывание файла и его парсинг занял на Gson 1 сек, если LoganSquare - 0,6. Я не думаю, что у вас будет больше чем это. Все это можно хранить в памяти в виде json строки. И парсить ее в объекты когда надо (объекты в памяти больше места занимают, чем просто json строка).
0
ExFau$t
638 / 538 / 122
Регистрация: 08.05.2012
Сообщений: 2,699
21.06.2017, 15:01 6
Как вариант, SharedPref отлично подходит, как миниБД. Я как-то разместил там адреску Москвы, ни о каких задержках и парсинге речи не было. Порядок кол-ва записей примерно такой же. Может это и не по феншую, но очень удобно, а главное быстро.
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
26.06.2017, 06:41  [ТС] 7
Спасибо за советы! Буду пробовать
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
03.07.2017, 20:33  [ТС] 8
Я хочу чтобы показывался список формул, с помощью recyclerview и cardview в фрагменте, возможность добавления формулы в избранное (как то отмечать это чтобы потом в отдельном фрагменте показывать избранные формулы) а также поиск по списку этих формул с помощью searchView.
Подскажите что лучше всего для этого использовать JSON, SQLite, SharedPreference?
Всего формул около 300.
И еще не сложно скиньте пример или урок как это делается(не обязательно)
Спасибо за ответы!
0
ExFau$t
638 / 538 / 122
Регистрация: 08.05.2012
Сообщений: 2,699
04.07.2017, 11:23 9
Использовать бд для пары записей не целесообразно.
0
Pablito
2764 / 2196 / 743
Регистрация: 12.05.2014
Сообщений: 7,706
Завершенные тесты: 1
04.07.2017, 11:29 10
Цитата Сообщение от Mr Endless Посмотреть сообщение
Подскажите что лучше всего для этого использовать JSON, SQLite, SharedPreference
читать разучился?
тебе человек двумя сообщениями выше написал, что можно использовать SharedPreference
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
04.07.2017, 11:59  [ТС] 11
Если я в настройках нажму стереть данные, то что я делал в sharedPreferences сотрется?
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
04.07.2017, 12:00  [ТС] 12
Тогда JSON лучше использовать или sharedPreferences? В чем проще сделать?
0
Pablito
2764 / 2196 / 743
Регистрация: 12.05.2014
Сообщений: 7,706
Завершенные тесты: 1
04.07.2017, 12:03 13
проверить самому не?
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
04.07.2017, 12:43  [ТС] 14
проверил, стирается!
0
ExFau$t
638 / 538 / 122
Регистрация: 08.05.2012
Сообщений: 2,699
04.07.2017, 13:13 15
Ну стирается и дальше что? Работать больше нельзя, мобилу на помойку?
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
04.07.2017, 13:22  [ТС] 16
для хранения контента не подходит значит, пользователь сотрет данные, и контент не запустится
0
Pablito
2764 / 2196 / 743
Регистрация: 12.05.2014
Сообщений: 7,706
Завершенные тесты: 1
04.07.2017, 13:27 17
а тебе не приходило в голову, что если пользователь нажимает СТЕРЕТЬ данные то он хочет СТЕРЕТЬ данные?
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
04.07.2017, 13:30  [ТС] 18
Ну может он хочет стереть изменения, а не стереть работоспособность программы(при запуске никакой информации, белый экран и toolbar), для второго обычно удаляют приложения
0
ExFau$t
638 / 538 / 122
Регистрация: 08.05.2012
Сообщений: 2,699
04.07.2017, 14:13 19
Когда он нажимает стереть, в нормальных приложениях будет видимость первого запуска, как после установки, а не белого экрана и вылетов.
0
Mr Endless
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 31
05.07.2017, 18:39  [ТС] 20
Ну и что, МНЕ не подходит, значит не подходит
0
05.07.2017, 18:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2017, 18:39

Добавление записи в Базу данных
Добрый вечер, Есть работающее приложение для чтения и отправки сообщений....

Загрузить собственную базу данных
Есть своя база данных &quot;mydb&quot; с таблицей &quot;table&quot;. Как добавить базу данных в...

Добавление таблиц в базу данных
Здравствуйте. Хочу добавить ещё одну таблицу в уже существующий файл базы...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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