如何在mysql数据库或JSONsharedpreferences键在扑列表收藏夹记录选择?

问题描述

我想在我的智能手机上保存 sharedpreferences 键。 键是表中的表 ID(自动增量)。 现在我想在新标签显示这些最喜欢的记录。

如何在我的数据库表中使用这些键进行选择? 或者是否可以将它们与我在开始时选择的 json 数据集中的所有记录进行比较以显示表中的所有记录?

目前我将键保存在字符串中。 然后在列表视图中显示它们。

  Future<void> _save() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    final key = '${widget.id}';
    final value = '${widget.id}';
    prefs.setString(key,value);
  }


  Future<List<Widget>> getAllPrefs() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    //final SharedPreferences prefs = await PrefStore().prefs;
    return prefs
        .getKeys()
        .map<Widget>((key) => ListTile(
      title: Text(key),subtitle: Text(prefs.get(key).toString()),))
        .toList(growable: false);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder<List<Widget>>(
          future: getAllPrefs(),builder: (context,snapshot) {
            if (!snapshot.hasData) return Container();
            return ListView(
              children: snapshot.data,);
          }),);
  }

非常感谢。

解决方法

我有一个很好的主意,效果很好,见下文。 但如果你有更好的解决方案,也请贴出来。

我只为 getInstance 和 SQL-Select 使用了一个 future。

// get the keys,convert to string,change {1,2,3} to (1,3) with strings/substring
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String allkeys = prefs.getKeys().toString();
    keylist = '(' + allkeys.substring(1,allkeys.length - 1) + ')';

然后用keylist选择如下:

select * from table where table.id in $keylist
// means: ... where table.id in (1,3)

如果需要更多代码,请评论,谢谢

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...