Realm - автономное использование - PullRequest
0 голосов
/ 18 октября 2018

Я создаю приложение, которое загружает данные из определенного источника и сохраняет их в базе данных 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);
    }

1 Ответ

0 голосов
/ 18 октября 2018

В вашем методе initRealm() вы включаете следующую команду:

Realm.deleteRealm(realmConfig);

В двух словах, вы удаляете свою область каждый раз, когда инициализируете ее.Вот почему вы не получите никаких результатов обратно.Вам не нужно подключение к интернету, чтобы получить доступ к своей сфере.Хранится локально.Вы должны просто не удалять его.

...