领域 - 离线使用
Realm - offline use
我正在创建一个应用程序,它从特定来源下载数据并将它们存储在 Realm 数据库中。根据我的理解,我应该每次都能访问那个数据库,我需要那个数据,之后。
所以我尝试了以下过程:初始化数据库。下载数据并获取该数据的数据库。在终端上打印数据。 -> 至此,一切顺利。
所以现在根据我的理解,我关闭了应用程序并重新启动了它。现在我试着把数据打印出来,但是没有任何反应。这是否意味着数据库只在我的应用程序处于活动状态期间有效?
有没有办法将 Realm 数据库存储在 android 设备上以供离线使用?这意味着,如果我的用户无法访问互联网并需要使用下载的数据库。
我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
final MainActivity act = this;
initRealm();
setRights();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Button for updating database
Button btn = findViewById(R.id.getData);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Connects to database
ConnectToDatabase c = new ConnectToDatabase(act);
c.doInBackground();
values = c.getValues();
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
int i = 0;
for (List<Object> rows : values) {
entry e = realm.createObject(entry.class, String.valueOf((++i) + 1));
//e.setEntry();
e.setNachname((String) rows.get(1));
}
realm.commitTransaction();
realm.close();
//showResults();
}
});
Button btn2 = findViewById(R.id.qr_scanner);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
showResults();
}
});
}
//Show current Realm results
public void showResults(){
Realm realm = Realm.getDefaultInstance();
RealmQuery<entry> query = realm.where(entry.class);
RealmResults<entry> listEntries = query.findAll();
for (entry x : listEntries){
System.out.println(x.getId());
}
realm.close();
}
//Initialisation for Realm
private void initRealm() {
Realm.init(this);
String root = Environment.getExternalStorageDirectory().getAbsolutePath();
RealmConfiguration realmConfig = new RealmConfiguration.Builder()
.name("management.database")
.directory(new File(this.getFilesDir().getAbsolutePath() + "/realm/"))
.build();
Realm.deleteRealm(realmConfig);
Realm.setDefaultConfiguration(realmConfig);
}
private void setRights() {
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
在您的 initRealm()
方法中,您包括以下命令:
Realm.deleteRealm(realmConfig);
简而言之,每次初始化时都会删除您的领域。这就是您得不到任何结果的原因。您不需要互联网连接即可访问您的领域。它存储在本地。你应该避免删除它。
我正在创建一个应用程序,它从特定来源下载数据并将它们存储在 Realm 数据库中。根据我的理解,我应该每次都能访问那个数据库,我需要那个数据,之后。
所以我尝试了以下过程:初始化数据库。下载数据并获取该数据的数据库。在终端上打印数据。 -> 至此,一切顺利。
所以现在根据我的理解,我关闭了应用程序并重新启动了它。现在我试着把数据打印出来,但是没有任何反应。这是否意味着数据库只在我的应用程序处于活动状态期间有效?
有没有办法将 Realm 数据库存储在 android 设备上以供离线使用?这意味着,如果我的用户无法访问互联网并需要使用下载的数据库。
我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
final MainActivity act = this;
initRealm();
setRights();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Button for updating database
Button btn = findViewById(R.id.getData);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Connects to database
ConnectToDatabase c = new ConnectToDatabase(act);
c.doInBackground();
values = c.getValues();
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
int i = 0;
for (List<Object> rows : values) {
entry e = realm.createObject(entry.class, String.valueOf((++i) + 1));
//e.setEntry();
e.setNachname((String) rows.get(1));
}
realm.commitTransaction();
realm.close();
//showResults();
}
});
Button btn2 = findViewById(R.id.qr_scanner);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
showResults();
}
});
}
//Show current Realm results
public void showResults(){
Realm realm = Realm.getDefaultInstance();
RealmQuery<entry> query = realm.where(entry.class);
RealmResults<entry> listEntries = query.findAll();
for (entry x : listEntries){
System.out.println(x.getId());
}
realm.close();
}
//Initialisation for Realm
private void initRealm() {
Realm.init(this);
String root = Environment.getExternalStorageDirectory().getAbsolutePath();
RealmConfiguration realmConfig = new RealmConfiguration.Builder()
.name("management.database")
.directory(new File(this.getFilesDir().getAbsolutePath() + "/realm/"))
.build();
Realm.deleteRealm(realmConfig);
Realm.setDefaultConfiguration(realmConfig);
}
private void setRights() {
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
在您的 initRealm()
方法中,您包括以下命令:
Realm.deleteRealm(realmConfig);
简而言之,每次初始化时都会删除您的领域。这就是您得不到任何结果的原因。您不需要互联网连接即可访问您的领域。它存储在本地。你应该避免删除它。