我正在使用SharedPreferences来保存来自API的响应。我想在我的应用离线或切换到另一个选项卡时使用,数据将不会再次重新加载。但它不工作。它只在我在线时工作。但如果我在线,我切换页面,数据将重新加载。如果我离线,数据将不会出来。
f5emj3cl1#
从代码中,我看到当你在线的时候,你会得到数据并对其进行解析,但是当你离线的时候,你会在try-catch块中做所有的事情,所以当你离线的时候,你还没有处理的catch块中会发生套接字异常。
SharedPreferences prefs = await SharedPreferences.getInstance(); String myDataValue = prefs.getString('myData'); final project = pagesDataFromJson(myDataValue);
如果在catch中调用它,则可以在脱机时获取数据。但这只是一个修复检查此链接,它会告诉你是否有互联网或没有:https://pub.dev/packages/data_connection_checker或者你可以参考这段视频:https://www.youtube.com/watch?v=u_Xyqo6lhFE因此,它不会从prefrences加载数据,因为当您获得异常时,它会直接转到catch,而不会离开下面的代码。
acruukt92#
最后返回数据:
Future<PagesData> sendPagesDataRequest(int page) async { SharedPreferences prefs = await SharedPreferences.getInstance(); try { // your codes ... } finally { String myDataValue = prefs.getString('myData'); return pagesDataFromJson(myDataValue); } }
dwbf0jvd3#
从API获取数据
Future<String> fetchPagesData(int page) { String url = Uri.encodeFull("https://API_URL?page=$page"); return http.get(url).body; }
设置SharedPreferences数据
SharedPreferences
Future<String> setPagesData(int page, String value) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString('myData$page', value); }
获取SharedPreferences数据
Future<PagesData> getPagesData(int page) async { SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.getString('myData$page'); }
脱机时捕获
Future<PagesData> sendPagesDataRequest(int page) async { try { fetchPagesData(page).then((value) => setPagesData(page, value)); // } on SocketException { // no network connection } catch (e) {} return getPagesData(page); }
3条答案
按热度按时间f5emj3cl1#
从代码中,我看到当你在线的时候,你会得到数据并对其进行解析,但是当你离线的时候,你会在try-catch块中做所有的事情,所以当你离线的时候,你还没有处理的catch块中会发生套接字异常。
如果在catch中调用它,则可以在脱机时获取数据。
但这只是一个修复检查此链接,它会告诉你是否有互联网或没有:https://pub.dev/packages/data_connection_checker
或者你可以参考这段视频:
https://www.youtube.com/watch?v=u_Xyqo6lhFE
因此,它不会从prefrences加载数据,因为当您获得异常时,它会直接转到catch,而不会离开下面的代码。
acruukt92#
最后返回数据:
dwbf0jvd3#
从API获取数据
设置
SharedPreferences
数据获取
SharedPreferences
数据脱机时捕获