我的项目要求学生从主服务器(MySQL数据库)检索到他们的Android设备(SQLite)的类例程(Schedule)。
- >学生必须在第一次运行应用程序时从其Android设备上获取加载服务器的例程,然后在更新例程/课程的时间表时获取更新。他们应该能够在离线模式下查看例程,因此SQLite将具有与服务器上相同的数据。
我已经使用PHP和JSON从数据库中检索和解析了数据。我只需要在SQLite中插入例程细节一次。所以我必须在数据库OnCreate 方法上进行数据检索,解析(从主服务器)和插入到SQLite,还是有另一种方法可以更有效地进行。
很抱歉,如果这是一个愚蠢的问题,我是SQLite和Android的新手。
答案 0 :(得分:4)
我使用sharedpreferences只插入一次数据,只需这样使用它:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isFirstTime()) {
// insert data
}
}
private boolean isFirstTime()
{
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
boolean ranBefore = preferences.getBoolean("RanBefore", false);
if (!ranBefore) {
// first time
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("RanBefore", true);
editor.commit();
}
return !ranBefore;
}
答案 1 :(得分:1)
首先,在sqlite数据库类中创建一个方法,以检查现有表是否为空。并在你的开始活动的oncreate方法上调用该方法。如果你的表是空的,那么在其中插入记录,否则不插入..
public boolean checkDBIsNull(String table) {
Cursor cur = db.rawQuery("SELECT COUNT(*) FROM " + table + "", null);
if (cur != null) {
cur.moveToFirst();
System.out.println("record : " + cur.getInt(0));
if (cur.getInt(0) == 0) {
System.out.println("Table is Null");
cur.close();
return true;
}
cur.close();
} else {
System.out.println("Cursor is Null");
return true;
}
System.out.println("Table Not Null");
return false;
}