SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Làm thế nào để Cache JSON được phân tích cú pháp để sử dụng Ngoại tuyến

Tại sao không chỉ lưu nó vào thư mục bộ nhớ cache của ứng dụng của bạn bằng cách sử dụng một cái gì đó như thế này:

String path = Environment.getExternalStorageDirectory() + File.separator + "cache" + File.separator;
File dir = new File(path);
if (!dir.exists()) {
    dir.mkdirs();
}
path += "data";
File data = new File(path);
if (!data.createNewFile()) {
    data.delete();
    data.createNewFile();
}
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(data));
objectOutputStream.writeObject(actorsList);
objectOutputStream.close();

Và sau đó, bạn có thể đọc nó bất cứ lúc nào bằng cách sử dụng:

List<?> list = null;
File data = new File(path);
try {
    if(data.exists()) {
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(data));
        list = (List<Object>) objectInputStream.readObject();
        objectInputStream.close();
    }
} catch (IOException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

CẬP NHẬT: Được rồi, tạo lớp có tên là ObjectToFileUtil, dán mã này vào lớp đã tạo

package <yourpackagehere>;

import android.os.Environment;

import java.io.*;

public class ObjectToFileUtil {

    public static String objectToFile(Object object) throws IOException {
        String path = Environment.getExternalStorageDirectory() + File.separator + "cache" + File.separator;
        File dir = new File(path);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        path += "data";
        File data = new File(path);
        if (!data.createNewFile()) {
            data.delete();
            data.createNewFile();
        }
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(data));
        objectOutputStream.writeObject(object);
        objectOutputStream.close();
        return path;
    }

    public static Object objectFromFile(String path) throws IOException, ClassNotFoundException {
        Object object = null;
        File data = new File(path);
        if(data.exists()) {
            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(data));
            object = objectInputStream.readObject();
            objectInputStream.close();
        }
        return object;
    }
}

Thay đổi thành tên gói của bạn và đừng quên thêm WRITE_EXTERNAL_STORAGE quyền đối với AndroidManifest.xml . Trong trường thêm MainActivity của bạn

private String dataPath;

và thay thế phương thức onPostExecute của lớp JSONAsyncTask thành

protected void onPostExecute(Boolean result) {
    dialog.cancel();
    adapter.notifyDataSetChanged();
    if(result) {
        try {
            dataPath = objectToFile(arrayList);
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();
    }
}

Giờ đây, bạn có thể truy cập lấy danh sách diễn viên từ Tệp bất cứ lúc nào bạn muốn, bằng cách sử dụng

try {
    actorsList = (ArrayList<Actors>)objectFromFile(dataPath);
} catch (IOException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

Nếu bạn muốn lưu đường dẫn của tệp sau khi đóng ứng dụng, bạn phải lưu chuỗi dataPath (và tải khi khởi động ứng dụng), ví dụ, bằng cách sử dụng SharedPreferences.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cú pháp truy vấn nâng cao SQLite trên Android

  2. Chỉ mục dựa trên biểu thức SQLite

  3. <expr> được mong đợi, có '?'

  4. Các hàm &toán tử JSON trong SQLite (Danh sách đầy đủ)

  5. Chuyển đổi SQLite sang JSON