如何在android中存储json数据以便离线

时间:2018-03-07 15:46:06

标签: php android json api pixabay

我的应用程序从服务器获取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);
?> 

1 个答案:

答案 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
     }