gpt4 book ai didi

sqlite - Flutter 创建 sqlite 数据库助手以仅返回 1 个字符串或任何其他单个对象类型

转载 作者:IT王子 更新时间:2023-10-29 06:51:29 24 4
gpt4 key购买 nike

在 Android (java base) 中使用 sqlite 非常简单。我可以使用我的自定义数据库助手以这种方式检索数据列表或单个数据。

:

    public String getLastNetPrintUrl() {
String lastPrintUrl;
String lastId = "SELECT * FROM " + TABLE_NET_PRINT + " WHERE " + COL_NETPRINT_ID +
" = (SELECT MAX(" + COL_NETPRINT_ID + ") FROM " + TABLE_NET_PRINT + ")";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(lastId, null);
if(cursor.moveToFirst()) {
lastPrintUrl = cursor.getString(4);
} else {
lastPrintUrl = "";
}
db.close();
return lastPrintUrl;
}

在上面的代码中,我只是想获取最后记录的 URL。然后在事件中,我可以调用

String netPrintUrl = dbhelper.getLastNetPrintUrl();

如何在 Flutter 中使用 sqflite 实现相同的目标?

到目前为止我做了什么,

  Future<String> getLastUrl() async {
var dbClient = await db;
String lastUrlQuery = 'SELECT * FROM device WHERE id = (SELECT MAX( id ) FROM device)';
var dbQuery = await dbClient.rawQuery(lastUrlQuery);
if (dbQuery.length > 0) {
String lastUrl = dbQuery.first.values.toString();
return lastUrl;
} else {
return '192.168.11.17:7700';
}

但是每当我尝试调用那个方法时,都是以同样的方式,比如

String lastUrl = dbhelper.getLastUrl;

Future 的值类型不能赋值给 'String' 类型的变量;

我对 Flutter 还是很陌生,在上面找不到任何关于我的意图的引用。任何提示表示赞赏。

*编辑:

“设备”表仅包含 2 列,即整数唯一 ID 和 url(作为文本)。

编辑:代码的最后部分

final _formKey = new GlobalKey<FormState>();
final _urlController = new TextEditingController();

DatabaseHelper dbhelper = DatabaseHelper();
String atiDeviceUrl;

Future getUrl() async{
atiDeviceUrl = await dbhelper.getLastUrl();
_urlController.text = atiDeviceUrl;
print('atiDeviceUrl: $atiDeviceUrl');
}

@override
void initState() {
getUrl();
super.initState();
}

最佳答案

您需要熟悉 asynchronous programming在 Dart 中。

当您调用异步 ( async ) 函数时,例如 dbhelper.getLastUrl() ,函数体实际上并没有立即执行。

相反,一个 Future 对象被返回给你,执行继续回到你调用函数的地方。异步函数将在以后不确定的时间执行。这就是为什么你不能有 String结果,而是一个 Future<String> .

因此,要实际获得 String你的函数的结果并在同步代码中用它做任何有用的事情,你必须等待 Future 的完成使用 Future.then() .例如:

dbhelper.getLastUrl().then((final String lastURL) {
print("The last URL was: $lastURL");
});

但是,如果您调用 dbhelper.getLastUrl()来自另一个async功能,只需添加关键字 await ,事情看起来简单多了:

final String lastURL = await dbhelper.getLastUrl();
print("The last URL was: $lastURL");

在幕后,这基本上等同于前面的示例,但 Dart 会自动为您生成回调处理程序代码。

现在,好消息是,如果您需要调用您的 async例如,来自按钮按下回调处理程序的功能,您通常只需添加魔术 async该回调函数的关键字,一切都非常简单。例如,试试这个:

RaisedButton(
child: Text("Get the last URL"),
onPressed: () async {
final String lastURL = await dbhelper.getLastUrl();
print("The last URL was: $lastURL");
},
)

关于sqlite - Flutter 创建 sqlite 数据库助手以仅返回 1 个字符串或任何其他单个对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53101276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com