Android 此领域实例已关闭

Android 此领域实例已关闭,android,realm,Android,Realm,我正在开发一个cv应用程序并使用realm来保存改装响应,但我遇到以下例外情况: FATAL EXCEPTION: main Process: activity.drawer.navigation.com.kitabsawticlone, PID: 5400 java.lang.IllegalStateException: This Realm instance has already been closed, making it unusable. at io.realm.BaseRe

我正在开发一个cv应用程序并使用realm来保存改装响应,但我遇到以下例外情况:

FATAL EXCEPTION: main
Process: activity.drawer.navigation.com.kitabsawticlone, PID: 5400
java.lang.IllegalStateException: This Realm instance has already been closed, making it unusable.
    at io.realm.BaseRealm.checkIfValid(BaseRealm.java:435)
    at io.realm.Realm.where(Realm.java:1368)
    at activity.drawer.navigation.com.kitabsawticlone.IntroductionItem$1.onResponse(IntroductionItem.java:60)
My IntroductionItem.java类:

public class IntroductionItem extends AppCompatActivity {

    public RealmList<Introduction> introductionList;

    public IntroductionAdapter adapter;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.introduction);
        KitabInterface kitabInterface = ApiClient.getApiService();
        Call<KitabSawti> call = kitabInterface.getIntroduction();

        call.enqueue(new Callback<KitabSawti>() {
            @Override
            public void onResponse(Call<KitabSawti> call, Response<KitabSawti> response) {
                introductionList = response.body().getIntroduction();
                Realm.init(IntroductionItem.this);

                RealmConfiguration config = new RealmConfiguration.Builder()
                        .name("overview.realm")
                        .schemaVersion(1)
                        .deleteRealmIfMigrationNeeded()
                        .build();
                Realm.setDefaultConfiguration(config);


                // add response to realm database
                Realm realm = Realm.getInstance(config);
                realm.beginTransaction();
                realm.copyToRealmOrUpdate(introductionList);
                realm.commitTransaction();
                realm.close();


// programmatically check : data is inserted in to realm or not

                int notesCount = realm.where(KitabSawti.class).findAll().size();
                int notesCount2 = realm.where(Introduction.class).findAll().size();


                Log.d("my first", String.valueOf(notesCount));
                Log.d("my second", String.valueOf(notesCount2));


                RecyclerView recyclerView = findViewById(R.id.recyclerView);
                recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
                adapter = new IntroductionAdapter(IntroductionItem.this, introductionList); // changes
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onFailure(Call<KitabSawti> call, Throwable t) {

            }
        });
    }
}
public class IntroductionItem扩展了AppCompative活动{
公共RealmList介绍列表;
公开介绍适配器;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.introduction);
KitabInterface KitabInterface=ApiClient.getApiService();
Call Call=kitabInterface.getIntroduction();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
introductionList=response.body().getIntroduction();
Realm.init(IntroductionItem.this);
RealmConfiguration config=newrealmconfiguration.Builder()
.name(“overview.realm”)
.阴谋厌恶(1)
.DeleteRealMifMigrationRequired()
.build();
Realm.setDefaultConfiguration(配置);
//向领域数据库添加响应
Realm Realm=Realm.getInstance(配置);
realm.beginTransaction();
realm.copyToRealmOrUpdate(简介列表);
realm.commitTransaction();
realm.close();
//以编程方式检查:数据是否插入到域中
int notesunt=realm.where(KitabSawti.class).findAll().size();
int notesCount2=realm.where(Introduction.class).findAll().size();
Log.d(“我的第一个”,String.valueOf(notesunt));
Log.d(“我的第二个”,String.valueOf(notesconnt2));
RecyclerView RecyclerView=findViewById(R.id.RecyclerView);
setLayoutManager(新的LinearLayoutManager(getApplicationContext());
adapter=new IntroductionAdapter(IntroductionItem.this,introductionList);//更改
recyclerView.setAdapter(适配器);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
}

当您使用
realm.close()时,您正在关闭realm,将此线路移动到通话结束处。像这样:

public class IntroductionItem extends AppCompatActivity {

    public RealmList<Introduction> introductionList;

    public IntroductionAdapter adapter;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.introduction);
        KitabInterface kitabInterface = ApiClient.getApiService();
        Call<KitabSawti> call = kitabInterface.getIntroduction();

        call.enqueue(new Callback<KitabSawti>() {
            @Override
            public void onResponse(Call<KitabSawti> call, Response<KitabSawti> response) {
                introductionList = response.body().getIntroduction();
                Realm.init(IntroductionItem.this);

                RealmConfiguration config = new RealmConfiguration.Builder()
                        .name("overview.realm")
                        .schemaVersion(1)
                        .deleteRealmIfMigrationNeeded()
                        .build();
                Realm.setDefaultConfiguration(config);


                // add response to realm database
                Realm realm = Realm.getInstance(config);
                realm.beginTransaction();
                realm.copyToRealmOrUpdate(introductionList);
                realm.commitTransaction();



// programmatically check : data is inserted in to realm or not

                int notesCount = realm.where(KitabSawti.class).findAll().size();
                int notesCount2 = realm.where(Introduction.class).findAll().size();


                Log.d("my first", String.valueOf(notesCount));
                Log.d("my second", String.valueOf(notesCount2));


                RecyclerView recyclerView = findViewById(R.id.recyclerView);
                recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
                adapter = new IntroductionAdapter(IntroductionItem.this, introductionList); // changes
                recyclerView.setAdapter(adapter);
                realm.close();
            }

            @Override
            public void onFailure(Call<KitabSawti> call, Throwable t) {

            }
        });
    }
}
public class IntroductionItem扩展了AppCompative活动{
公共RealmList介绍列表;
公开介绍适配器;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.introduction);
KitabInterface KitabInterface=ApiClient.getApiService();
Call Call=kitabInterface.getIntroduction();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
introductionList=response.body().getIntroduction();
Realm.init(IntroductionItem.this);
RealmConfiguration config=newrealmconfiguration.Builder()
.name(“overview.realm”)
.阴谋厌恶(1)
.DeleteRealMifMigrationRequired()
.build();
Realm.setDefaultConfiguration(配置);
//向领域数据库添加响应
Realm Realm=Realm.getInstance(配置);
realm.beginTransaction();
realm.copyToRealmOrUpdate(简介列表);
realm.commitTransaction();
//以编程方式检查:数据是否插入到域中
int notesunt=realm.where(KitabSawti.class).findAll().size();
int notesCount2=realm.where(Introduction.class).findAll().size();
Log.d(“我的第一个”,String.valueOf(notesunt));
Log.d(“我的第二个”,String.valueOf(notesconnt2));
RecyclerView RecyclerView=findViewById(R.id.RecyclerView);
setLayoutManager(新的LinearLayoutManager(getApplicationContext());
adapter=new IntroductionAdapter(IntroductionItem.this,introductionList);//更改
recyclerView.setAdapter(适配器);
realm.close();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
}

Remove
realm.close()
并将其放在top()或其他地方。@LeoPolozo我必须关闭它的确切位置在处理完领域实例后,您需要关闭它。在你的例子中,它可能是onResponse()的最后一行是的,没问题。请将您的问题标记为已回答。Polozo它已正确执行。我的意思是,当应用程序脱机时,它应该可以工作。这是我第一次使用realm感谢您的回答