我的应用程序从服务器获取JSON数据。如果我使用my own json api,则仅在互联网连接中加载数据。但是,如果我使用此api(https://pixabay.com/api/?key=5303976-fd6581ad4ac165d1b75cc15b3&q=kitten&image_type=photo&pretty=true),则数据也会在离线状态下显示,一旦应用程序获得互联网连接。
相同的代码,在失去互联网连接后也会加载一个json url,互联网断开连接后不显示另一个数据。如何从服务器端将数据存储在android缓存中作为此URL(https://pixabay.com/api/?key=5303976-fd6581ad4ac165d1b75cc15b3&q=kitten&image_type=photo&pretty=true)。
我的api(api1.php)
<?php
require("includes/connect.php");
header('Content-Type: application/json');
$query="SELECT * FROM implink";
$result = $con->query('SELECT id,heading,content FROM implink');
$rows = $result->fetchAll(PDO::FETCH_ASSOC);
header('Content-Type: application/json;charset=utf-8');
echo json_encode(['info' => $rows],
JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
?>
答案 0 :(得分:1)
我的第一个建议是不发布您的API密钥。例如,可能是免费的,但在互联网上共享API密钥将使您的基础设施处于危险之中。
在查询请求时,似乎设置了一些可能影响缓存的标头。
Access-Control-Max-Age → 86400
Cache-Control → max-age=86400
Content-Type → application/json
查看HttpResponseCache上的Android文档。它概述了在设置HttpResponseCache后如何强制执行缓存响应。
try {
connection.addRequestProperty("Cache-Control", "only-if-cached");
InputStream cached = connection.getInputStream();
// the resource was cached! show it
} catch (FileNotFoundException e) {
// the resource was not cached
}