相关疑难解决方法(0)

领域从错误的线程访问

我有一个应用程序LoginActivity,当用户正确登录时,我注册接收消息.而且LoginActivity跳到了MainActivity.到达的消息应该存储在数据库(Realm)中,以便从Main中的Realm实例中恢复.

但是当消息到达时崩溃领域启动此错误:

Exception in packet listener
    java.lang.IllegalStateException: Realm access from incorrect thread. Realm objects can only be accessed on the thread they were created.
    at io.realm.BaseRealm.checkIfValid(BaseRealm.java:383)
    at io.realm.Realm.executeTransactionAsync(Realm.java:1324)
    at io.realm.Realm.executeTransactionAsync(Realm.java:1276)
    at es.in2.in2tant.LoginActivity.newMessageReceived(LoginActivity.java:124)
    at es.in2.in2tant.Connection.Connection$4$1.processMessage(Connection.java:227)
    at org.jivesoftware.smack.chat.Chat.deliver(Chat.java:180)
    at org.jivesoftware.smack.chat.ChatManager.deliverMessage(ChatManager.java:351)
    at org.jivesoftware.smack.chat.ChatManager.access$300(ChatManager.java:53)
    at org.jivesoftware.smack.chat.ChatManager$2.processPacket(ChatManager.java:162)
    at org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1126)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)

我对Realm如何工作有点迷茫,我不知道如何在没有崩溃的情况下在整个应用程序中访问域,并保持存储从收到的消息LoginActivity.一些帮助,或实现这一目标的方法?

LoginActivity.java:

public class LoginActivity extends AppCompatActivity implements ConnectionConnectResponse {
.....
protected void onCreate(Bundle savedInstanceState) {
//Realm Init config:
        Realm.init(this);
        RealmConfiguration …
Run Code Online (Sandbox Code Playgroud)

android realm

18
推荐指数
1
解决办法
2万
查看次数

Android:Realm + Retrofit 2 + Gson

使用Retrofit + GsonRealm时遇到问题.我知道这3个库的组合存在问题.一些答案表明,ExclusionStrategyGson设置一个可以解决这个问题,我试过但它没有用.

我的代码看起来像:

public class ObjectList {
    public List<AnotherObject> anotherObject;
 }

public class AnotherObject extends RealmObject {
    private String propA;
    public void setPropA(String propA){
       this.setPropA = propA
    }
    public String getPropA(){
       return propA
    }
}

        Gson gson = new GsonBuilder().setExclusionStrategies(new  ExclusionStrategy() {
        @Override
        public boolean shouldSkipField(FieldAttributes f) {
            return f.getDeclaringClass().equals(RealmObject.class);
        }

        @Override
        public boolean shouldSkipClass(Class<?> clazz) {
            return false;
        }
    }).create();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://localhost/api/")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();
    ObjectAPI objectAPI …
Run Code Online (Sandbox Code Playgroud)

android realm gson retrofit

10
推荐指数
1
解决办法
5658
查看次数

领域:使用Clean-Architecture和RxJava2

有点上下文,我试图将一些干净的架构应用到我的一个项目中,并且我遇到了我的存储库的(Realm)磁盘实现问题.我有一个存储库,它根据某些条件(缓存)从不同的DataStore中提取一些数据.这就是理论,将所有这些与UseCases和RxJava2混合时会出现问题.

首先,我从Realm获取对象列表,然后手动创建它的Observable.但是subscribe(正如预期的那样)在不同的线程上执行,因此领域最终崩溃......(第二块代码)

这是我用来创建Observables的代码(来自抽象类DiskStoreBase):

Observable<List<T>> createListFrom(final List<T> list) {
    return Observable.create(new ObservableOnSubscribe<List<T>>() {
        @Override
        public void subscribe(ObservableEmitter<List<T>> emitter) throws Exception {
            if (list != null) {
                emitter.onNext(list);
                emitter.onComplete();
            } else {
                emitter.onError(new ExceptionCacheNotFound());
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我该如何处理这种情况?

更多代码DiskStoreForZone:

@Override
public Observable<List<ResponseZone>> entityList() {
    Realm realm = Realm.getDefaultInstance();
    List<ResponseZone> result = realm.where(ResponseZone.class).findAll();
    return createListFrom(result);
}
Run Code Online (Sandbox Code Playgroud)

确切的崩溃:

E/REALM_JNI: jni: ThrowingException 8, Realm accessed from incorrect thread.
E/REALM_JNI: Exception has been thrown: Realm accessed from …
Run Code Online (Sandbox Code Playgroud)

android realm rx-java

3
推荐指数
1
解决办法
2074
查看次数

标签 统计

android ×3

realm ×3

gson ×1

retrofit ×1

rx-java ×1