Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未进行RxJava 2/改装2调用_Java_Android_Rx Java_Retrofit2_Rx Java2 - Fatal编程技术网

未进行RxJava 2/改装2调用

未进行RxJava 2/改装2调用,java,android,rx-java,retrofit2,rx-java2,Java,Android,Rx Java,Retrofit2,Rx Java2,我正在尝试将所有本地数据与服务器上的数据同步,因此我正在获取所有本地数据,对于本地数据以外的任何数据,我正在调用服务器获取其余数据 public Observable<List<Chat>> getChats(int userId) { Log.i("chatRequest", TAG); return Observable.merge(chatDiskData.getChats(), chatDiskData.getChats().flatMap(n

我正在尝试将所有本地数据与服务器上的数据同步,因此我正在获取所有本地数据,对于本地数据以外的任何数据,我正在调用服务器获取其余数据

public Observable<List<Chat>> getChats(int userId) {

    Log.i("chatRequest", TAG);

    return Observable.merge(chatDiskData.getChats(), chatDiskData.getChats().flatMap(new Function<RealmResults<Chat>, ObservableSource<List<Chat>>>() {
        @Override
        public ObservableSource<List<Chat>> apply(@NonNull RealmResults<Chat> chats) throws Exception {

            Log.i("chatRequest", TAG + "  inside");

            ArrayList<String> chatIds = new ArrayList<>();
            HashMap<String, Long> chatsTimeStamp = new HashMap<>();

            for (int i = 0; i < chats.size(); i++) {
                String chatId = chats.get(i).getChat_id();
                chatIds.add(chatId);

                long timestamp = chatDiskData.lastMessage(chatId);
                chatsTimeStamp.put(chatId, timestamp);
            }

            return chatCloudData.getChats(userId, chatIds, chatsTimeStamp).subscribeOn(Schedulers.io())
                    .doOnNext(chats1 -> Log.i("chatRequest", TAG + "  inside  inside"));
        }
    }));
}
public-observeable-getChats(int-userId){
Log.i(“聊天请求”,标签);
返回Observable.merge(chatDiskData.getChats(),chatDiskData.getChats().flatMap(新函数(){
@凌驾
公共ObserviceSource apply(@NonNull RealmResults chats)引发异常{
Log.i(“聊天请求”,标签+“内部”);
ArrayList chatIds=新的ArrayList();
HashMap chatsTimeStamp=新建HashMap();
对于(int i=0;iLog.i(“chatRequest”,TAG+“inside”);
}
}));
}
ChatCloudData

public Observable<List<Chat>> getChats(int userId, ArrayList<String> 
    chatIds, HashMap<String, Long> chats) {

    Log.i("chatRequest", TAG);

    ChatsRequest chatsRequest = new ChatsRequest.Builder(userId)
            .chatIDs(chatIds)
            .chats(chats)
            .build();

    return apiService.getChats(chatsRequest);
}
public List<Chat> getChats(int userId, ArrayList<String> 
    chatIds, HashMap<String, Long> chats) {

    Log.i("chatRequest", TAG);

    ChatsRequest chatsRequest = new ChatsRequest.Builder(userId)
            .chatIDs(chatIds)
            .chats(chats)
            .build();

    return apiService.getChats(chatsRequest);
}
public-Observable-getChats(int-userId,ArrayList)
聊天ID、HashMap聊天){
Log.i(“聊天请求”,标签);
ChatsRequest ChatsRequest=新建ChatsRequest.Builder(用户ID)
.chatIDs(chatIDs)
.聊天室(聊天室)
.build();
返回apiService.getChats(chatsRequest);
}
端点

@POST(“聊天/同步”)
可观察的getChats(@Body ChatsRequest ChatsRequest)

输出结果如下所示

03-11 22:44:45.430 31540-31540/com.project I/chatRequest:com.project.ChatFragment
03-11 22:44:45.430 31540-31540/com.project I/chatRequest:com.project.Repository.ChatRepository
03-11 22:44:45.430 31540-31540/com.project I/chatRequest:com.project.Repository.ChatDiskData getChats
03-11 22:44:45.436 31540-31540/com.project I/chatRequest:com.project.Repository.ChatDiskData getChats
03-11 22:44:45.442 31540-31815/com.project I/chatRequest:com.project.Repository.ChatRepository inside


为什么不调用cloudData的getChats方法?

我认为您应该精确地指定您希望释放值的调度程序:

return chatCloudData.getChats(userId, chatIds, chatsTimeStamp).subscribeOn(Schedulers.io()).observeOn(relevantScheduler)
                    .doOnNext(chats1 -> Log.i("chatRequest", TAG + "  inside  inside"));
编辑:

public Observable<List<Chat>> getChats(int userId) {

    Log.i("chatRequest", TAG);

    return Observable.merge(chatDiskData.getChats(), chatDiskData.getChats().flatMap(new Function<RealmResults<Chat>, ObservableSource<List<Chat>>>() {
        @Override
        public ObservableSource<List<Chat>> apply(@NonNull RealmResults<Chat> chats) throws Exception {

            Log.i("chatRequest", TAG + "  inside");

            ArrayList<String> chatIds = new ArrayList<>();
            HashMap<String, Long> chatsTimeStamp = new HashMap<>();

            for (int i = 0; i < chats.size(); i++) {
                String chatId = chats.get(i).getChat_id();
                chatIds.add(chatId);

                long timestamp = chatDiskData.lastMessage(chatId);
                chatsTimeStamp.put(chatId, timestamp);
            }

            return Observable.fromCallable(new Callable<List<Chat>>() {
                @Override
                public List<Chat> call() throws Exception {
                    return chatCloudData.getChats(userId, chatIds, chatsTimeStamp).subscribeOn(Schedulers.io())
                    .doOnNext(chats1 -> Log.i("chatRequest", TAG + "  inside  inside"));
                }
            });
        }
    }));
}
public-observeable-getChats(int-userId){
Log.i(“聊天请求”,标签);
返回Observable.merge(chatDiskData.getChats(),chatDiskData.getChats().flatMap(新函数(){
@凌驾
公共ObserviceSource apply(@NonNull RealmResults chats)引发异常{
Log.i(“聊天请求”,标签+“内部”);
ArrayList chatIds=新的ArrayList();
HashMap chatsTimeStamp=新建HashMap();
对于(int i=0;iLog.i(“chatRequest”,TAG+“inside”);
}
});
}
}));
}
ChatCloudData

public Observable<List<Chat>> getChats(int userId, ArrayList<String> 
    chatIds, HashMap<String, Long> chats) {

    Log.i("chatRequest", TAG);

    ChatsRequest chatsRequest = new ChatsRequest.Builder(userId)
            .chatIDs(chatIds)
            .chats(chats)
            .build();

    return apiService.getChats(chatsRequest);
}
public List<Chat> getChats(int userId, ArrayList<String> 
    chatIds, HashMap<String, Long> chats) {

    Log.i("chatRequest", TAG);

    ChatsRequest chatsRequest = new ChatsRequest.Builder(userId)
            .chatIDs(chatIds)
            .chats(chats)
            .build();

    return apiService.getChats(chatsRequest);
}
公共列表getChats(int userId,ArrayList
聊天ID、HashMap聊天){
Log.i(“聊天请求”,标签);
ChatsRequest ChatsRequest=新建ChatsRequest.Builder(用户ID)
.chatIDs(chatIDs)
.聊天室(聊天室)
.build();
返回apiService.getChats(chatsRequest);
}
端点

@POST("Chat/sync")
    List<Chat> getChats(@Body ChatsRequest chatsRequest);
@POST(“聊天/同步”)
列出GetChat(@Body ChatsRequest ChatsRequest);
希望这有帮助

对不起,我的英语不好。

返回Observable.merge(chatDiskData.getChats().observeOn(AndroidSchedulers.mainThread()),
return Observable.merge(chatDiskData.getChats().observeOn(AndroidSchedulers.mainThread()),
            chatDiskData.getChats().observeOn(AndroidSchedulers.mainThread())
                    .flatMap(new Function<RealmResults<Chat>, ObservableSource<List<Chat>>>() {
                        @Override
                        public ObservableSource<List<Chat>> apply(@NonNull RealmResults<Chat> chats) throws Exception {

                            Log.i("chatRequest", TAG + "  inside");

                            ArrayList<String> chatIds = new ArrayList<>();
                            HashMap<String, Long> chatsTimeStamp = new HashMap<>();

                            for (int i = 0; i < chats.size(); i++) {
                                String chatId = chats.get(i).getChat_id();
                                chatIds.add(chatId);

                                long timestamp = chatDiskData.lastMessage(chatId);
                                chatsTimeStamp.put(chatId, timestamp);
                            }

                            return chatCloudData.getChats(userId, chatIds, chatsTimeStamp).subscribeOn(Schedulers.io())
                                    .doOnNext(chats1 -> Log.i("chatRequest", TAG + "  inside  inside"));
                        }
                    }));
chatDiskData.getChats().observeOn(AndroidSchedulers.mainThread()) .flatMap(新函数(){ @凌驾 公共ObserviceSource apply(@NonNull RealmResults chats)引发异常{ Log.i(“聊天请求”,标签+“内部”); ArrayList chatIds=新的ArrayList(); HashMap chatsTimeStamp=新建HashMap(); 对于(int i=0;iLog.i(“chatRequest”,TAG+“inside”); } }));

.observeOn(AndroidSchedulers.mainThread()是重要的部分,因为我在使用领域,它在另一个线程上获取数据。

您是指重写方法中返回语句的方法
chatCloudData.getChats…
@Override public observesesource apply(@NonNull RealmResults chats)抛出异常
?@Alex是的,我尝试了observeOn(AndroidSchedulers.mainThread())它不起作用。您是否尝试设置带有LoginInterctor的okhttp客户端以查看是否不是请求问题?是的,我已经这样做了,这不是请求问题,因为如果我单独调用chatCloudData.getChats(userId,ChatId,chatsTimeStamp)。subscribeOn(Schedulers.io()).doOnNext(chats1->Log.i(“chatRequest”,TAG+“inside”);它可以工作,但当我将它放入ret时