是否可以导出所有房间数据库与所有表,条目到json文件?我看到一些example是用SQLite做的,但是Room数据库呢?
ercv8c1e1#
您可以根据需要将Room实体对象传递给JSON生成器。如果您希望检索一堆实体并将它们写入JSON,您可以这样做。换句话说,您可以使用JSON生成器将Dog和Cat对象中的数据写入JSON。Dog和Cat对象的来源- Room、Retrofit、Realm等。- 没关系实现导出的范围(“所有房间数据库的所有表、条目”)由您决定。
Dog
Cat
oyjwcjzk2#
如果您了解如何将Room Database中的表导出为JSON,则会很有帮助。让我们看看怎么做。第一步:创建房间数据库模型
@Entity(tableName = "students") public class Student{ @PrimaryKey(autoGenerate = true) private int id; @ColumnInfo(name = "std_name") private String name; public Student(int id, String name){ this.id = id; this.name = name; } @Ignore public Student(String name){ this.name = name; } public int getId() { return id; } public String getName() { return name; } }
第二步:为Room数据库创建数据访问对象(DAO)
@Dao public interface StudentDAO { @Query("select * from students") List<Student> getStudents(); @Insert public void insert(Student student); // Other CRUD methods // .......... }
第三步:现在创建房间数据库
@Database(entities = { Student.class }, version = 1, exportSchema = false) public abstract class StudentDatabase extends RoomDatabase { private static final String DB_NAME ="StudentDb"; private static StudentDatabase stdInstance; public abstract StudentDAO stdDAO(); public synchronized static StudentDatabase getInstance(final Context context) { if (stdInstance == null) { stdInstance = Room.databaseBuilder(context, StudentDatabase.class, DB_NAME) .allowMainThreadQueries().build(); } return stdInstance; } }
第四步:从Room Database导出Student table为JSON格式
// Create reference variables in your Activity private List<Student> stdList; private StudentDatabase stdDatabase; private void exportJSON(){ Completable.fromAction(new Action() { @Override public void run() throws Exception { // stdDatabase.stdDAO().getStudents(); } }).observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new CompletableObserver() { @Override public void onSubscribe(Disposable d) { } @Override public void onComplete() { stdList = stdDatabase.stdDAO().getStudents(); Gson gson = new Gson(); Type type = new TypeToken<List<Student>>(){}.getType(); String stdJson = gson.toJson(stdList, type); // Call function to write file to external directory writeToStorage(getApplicationContext(), "StudnetJson", stdJson) } @Override public void onError(Throwable e) { // Show error message } }); } //Create a Method in your Activity public void writeToStorage(Context mContext, String fileName, String jsonContent){ File file = new File(mContext.getFilesDir(),"exportStudentJson"); if(!file.exists()){ file.mkdir(); } try{ File mFile = new File(file, fileName); FileWriter writer = new FileWriter(mFile); writer.append(jsonContent); writer.flush(); writer.close(); }catch (Exception e){ e.printStackTrace(); } }
即使你不明白,请让我写评论。注意:将来我会为这个问题创建一个GitHub项目。谢谢
2条答案
按热度按时间ercv8c1e1#
您可以根据需要将Room实体对象传递给JSON生成器。如果您希望检索一堆实体并将它们写入JSON,您可以这样做。
换句话说,您可以使用JSON生成器将
Dog
和Cat
对象中的数据写入JSON。Dog
和Cat
对象的来源- Room、Retrofit、Realm等。- 没关系实现导出的范围(“所有房间数据库的所有表、条目”)由您决定。
oyjwcjzk2#
如果您了解如何将Room Database中的表导出为JSON,则会很有帮助。让我们看看怎么做。
第一步:创建房间数据库模型
第二步:为Room数据库创建数据访问对象(DAO)
第三步:现在创建房间数据库
第四步:从Room Database导出Student table为JSON格式
即使你不明白,请让我写评论。
注意:将来我会为这个问题创建一个GitHub项目。谢谢