在项目中用数据库检索替换 json 检索
Replacing json retrieval with database retrieval in project
抱歉,如果我没有在这里提供足够的信息,我是 android/java 的新手,并且正在通过结合各种示例项目的元素来学习。
我有一个 Android 电视项目(使用 leanback)的工作 VerticalGridFragment
页面,它在列和行中加载专辑封面和详细信息。它大量借鉴了 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.addAll
将其添加到 mAdapter
一样简单。但是,我在使用迭代代码实现 List
of Card
对象方面运气不佳。绝望地,我认为我应该将数据库结果转换为 json
字符串并将它们输入到我上面显示的现有代码中?
感谢任何帮助。数据库与 json 变量的重建一样基本,可以进行调整以适应。
Realm for android 将是您的最佳选择。
它易于使用并且比 SQLite快。
它只需要几行代码就可以开始。请检查一下。在爱上 Realm 之后,我最近成为了 Realm Evangelist(非官方)。唯一的挫折是使用基于流畅界面的查询,只有当您的查询太复杂时才会发生这种情况。
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 表实际上包含正确的数据。它使调试更容易一些。
抱歉,如果我没有在这里提供足够的信息,我是 android/java 的新手,并且正在通过结合各种示例项目的元素来学习。
我有一个 Android 电视项目(使用 leanback)的工作 VerticalGridFragment
页面,它在列和行中加载专辑封面和详细信息。它大量借鉴了 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.addAll
将其添加到 mAdapter
一样简单。但是,我在使用迭代代码实现 List
of Card
对象方面运气不佳。绝望地,我认为我应该将数据库结果转换为 json
字符串并将它们输入到我上面显示的现有代码中?
感谢任何帮助。数据库与 json 变量的重建一样基本,可以进行调整以适应。
Realm for android 将是您的最佳选择。
它易于使用并且比 SQLite快。 它只需要几行代码就可以开始。请检查一下。在爱上 Realm 之后,我最近成为了 Realm Evangelist(非官方)。唯一的挫折是使用基于流畅界面的查询,只有当您的查询太复杂时才会发生这种情况。
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 表实际上包含正确的数据。它使调试更容易一些。