2016-07-06 4 views
1

Извинения, если я не предоставляю достаточно информации здесь, я новичок в android/java и изучаю, объединяя элементы различных проектов примеров.Замена поиска json с извлечением базы данных в проекте

У меня есть рабочий файл VerticalGridFragment для проекта Android TV (с использованием leanback), который загружает обложку обложки альбома и детали в столбцах и строках. Он сильно заимствует у googlesamples example on github.

Использование файла теста music_database_proto.json в формате:

{ 
    "cards": [ 
    { 
     "type": "GRID_SQUARE", 
     "title": "Around the World in a Day", 
     "artist": "Prince and the Revolution", 
     "description": "Prince and the Revolution", 
     "groupType": 0, 
     "tagID": 0, 
     "localImageResource": "food_01" 
    } 
} 

можно затем загрузить это с помощью createRows() функции (из того же примера проекта) с помощью:

PresenterSelector cardPresenterSelector = new CardPresenterSelector(getActivity()); 
mAdapter = new ArrayObjectAdapter(cardPresenterSelector); 
String json = Utils.inputStreamToString(getResources(). 
    openRawResource(R.raw.music_database_proto)); 
CardRow row = new Gson().fromJson(json, CardRow.class); 
mAdapter.addAll(0, row.getCards()); 

который использует образец классы проектов CardRow.class, Card.class и их различные вспомогательные классы в примере.

Я внедрил базу данных SQLite, которая успешно инициирует, и я могу вызывать различные результаты в журналах Android Studio. Я не знаю, с чего начать с вставки результатов из базы данных, как Cards, что я могу загрузить в VerticalGridFragment, заменив функцию файла json?

Я думал, что было бы просто создать List<Card> из результатов базы данных и добавить это к mAdapter используя mAdapter.addAll. Тем не менее, мне не повезло в реализации List объектов Card с использованием итерационного кода. В отчаянии я подумал, что должен преобразовать результаты базы данных в строку json и передать их в существующий код, показанный выше?

Любая помощь приветствуется. База данных является базовой, как воссоздание json-переменных и может быть скорректирована в соответствии с требованиями.

+0

Вы ищете простое решение для реализации автономного механизма хранения для хранения всех ваших классов JSON в базе данных ur? –

ответ

1

Что именно вы подразумеваете под However, I've had little luck in implementing a List of Card objects using iterating code.? Если вы звоните mAdapter.addAll(0, cards) со списком карточек, он должен работать по вашему желанию.

У вас возникли трудности с извлечением списка карт из базы данных SQLite? Вы можете положиться на this link, который имеет следующий ответ. Я немного изменил его примерно на Card.class. Вам также необходимо добавить конструктор к объекту Card, так как они предоставили его вам, предположив, что вы должны использовать @SerializedName для его инициализации. В приведенном ниже примере предполагается, что вы добавили конструктор, который выглядит как public Card(String title, String description).

List<Card> cardsList = new ArrayList<Card>(); 
database = openOrCreateDatabase("your_db", SQLiteDatabase.OPEN_READWRITE, null); 
if(database!=null) 
{ 
    c= database.rawQuery(QUERY, null); 
    c.moveToFirst(); 
    while(c.isAfterLast()==false) 
    { 
     Card card = new Card(c.getString(c.getColumnIndex("title")), 
          c.getString(c.getColumnIndex("description"))); 
     cardsList.add(card); 
     c.moveToNext(); 
    } 

} 
database.close(); 
c.close(); 

пример действительно только отправная точка, но они поощряют вас, чтобы настроить любого из этих классов в образце, чтобы лучше соответствовать вашим потребностям.

Мне также нравится, что вы пытаетесь изучить SQLite, так как это часть Android (и мобильная разработка в целом), которая хорошо знакома. Вы также можете использовать библиотеку, например Stetho by Facebook, чтобы убедиться, что ваши таблицы SQLite содержат правильные данные. Это облегчает отладку.

+0

Спасибо за советы. Я имел в виду, что мое знакомство с базовыми PHP, javascript и основами условного программирования, переменных и ценностей по-прежнему оставляет меня почесывать голову некоторыми примерами Android, на которые я указал. Например, если я просматриваю класс «Card.java» и думаю, что могу создать новый объект карты, ссылаясь на него, я неизбежно получу ошибку компиляции. Для более точного примера, если я использую ваш код выше, строка 'Card card = new Card (c.getString (c.getColumnIndex (« title »)) ...' производит 'Card() в Card не может быть применена к (java.lang.String, java.lang.String) ' – biscuitstack

+1

Теперь я понимаю. Чтобы создать экземпляр объекта (и заполнить его поля), вы можете использовать конструктор [https://docs.oracle.com/javase /tutorial/java/javaOO/constructors.html). Класс «Card», который они предоставляют, может только создавать свои поля через json на этом этапе. Поэтому вам нужно добавить новый «конструктор» к классу Card, который берет поля вы должны заполнить как аргументы. Что-то вроде 'public Card (String title, String description)'. Этот конструктор еще не существует, поэтому вам нужно добавить его (вот почему вы получаете эту ошибку компиляции). Пожалуйста, дайте мне знать, если это сработает. –

+0

Тогда я был на правильном пути. Я решил, что это проблема с текущим классом «Карта», показывающим различные сериализованные поля, когда я был tr чтобы дать ему строки. Это было лучшее прочтение ошибки, которую я мог бы сделать. Я собираюсь уйти и сделать некоторые исследования по этому поводу сейчас, большое спасибо за совет, и я обязательно отправлю его обратно. Я только что собрал некоторый грубый код, основанный на том, что вы сказали, и небольшом чтении. Кажется, слишком просто работать, поэтому я предполагаю, что буду немного дольше. Еще раз спасибо. – biscuitstack

1

Realm for android будет вашим лучшим выбором.

Его прост в использовании и его быстрее, чем SQLite. И его несколько строк кода, необходимых для начала. Пожалуйста, проверьте это. Я недавно настроен на то, чтобы стать евангелистом в королевстве (не официально) после того, как в него влюбился. Только неудача могла бы быть использована свободно на основе запросов на основе интерфейса, и это происходит, только если ваши запросы слишком сложны.

+0

Спасибо за предложение. Я совершенно новый для Android (и практически любой разработки программного обеспечения), поэтому я чувствую, что было бы разумно не пропустить знакомство с SQLite. Тем не менее, я знаком с MySQL с PHP и Android, и SQLite чувствует себя абсолютной болью по сравнению с ним. – biscuitstack