Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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
Java 如何使用改型2.0从其他线程获得响应_Java_Android_Json_Multithreading_Retrofit - Fatal编程技术网

Java 如何使用改型2.0从其他线程获得响应

Java 如何使用改型2.0从其他线程获得响应,java,android,json,multithreading,retrofit,Java,Android,Json,Multithreading,Retrofit,我使用改型2获得JSONArray,我想创建新的ManagerListAdapter(它是RecyclerView的适配器)并在构造函数中传递ArrayList(我从JSON获得) 目前,我在onResponse中成功地获得了此列表。 但这是另一条线 将其传输到主线程的最佳方式是什么? 也许我需要使用RxJava和RxAndroid private void initRecyclerView() { RecyclerView managersRecyclerView = (Re

我使用改型2获得JSON
Array
,我想创建新的
ManagerListAdapter
(它是
RecyclerView
的适配器)并在构造函数中传递
ArrayList
(我从JSON获得)

目前,我在
onResponse
中成功地获得了此列表。 但这是另一条线

将其传输到主线程的最佳方式是什么? 也许我需要使用RxJava和RxAndroid

 private void initRecyclerView() {
        RecyclerView managersRecyclerView = (RecyclerView) view.findViewById(R.id.managersRecyclerView);
        managersRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        managersRecyclerView.setAdapter(new ManagerListAdapter(getManagers()));




//        getRemoteManagers();


    }

private void getRemoteManagers() {

    ApiObject client = ServiceGenerator.createService(ApiObject.class);
    Call<List<ManagerDTO>> call = client.getManagers();


    call.enqueue(new Callback<List<ManagerDTO>>() {
        @Override
        public void onResponse(Call<List<ManagerDTO>> call, Response<List<ManagerDTO>> response) {


            if (response.isSuccessful()) {

                List<ManagerDTO> managers = response.body(); //I want to  add this List in RecyclerAdapter
                sortManagers(managers);

            }

        }

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

        }
    });


}


private List<ManagerDTO> getManagers() {

//It's for test. 

    List<ManagerDTO> managers = new ArrayList<>();

    managers.add(new ManagerDTO("Alex Pavlov", 100));
    managers.add(new ManagerDTO("Ivan Pavlov", 95));
    managers.add(new ManagerDTO("Petr Pavlov", 99));
    managers.add(new ManagerDTO("Stepan Pavlov", 100));
    managers.add(new ManagerDTO("Azik Pavlov", 100));
    managers.add(new ManagerDTO("Azik Myand", 100));
    managers.add(new ManagerDTO("Azik Specca", 50));
    managers.add(new ManagerDTO("Azik Kane", 0));
    managers.add(new ManagerDTO("Azik McDonald", 99));
    managers.add(new ManagerDTO("Azik Jagr", 1));

    sortManagers(managers);

    return managers;


}
private void initRecyclerView(){
RecyclerView Manager RecyclerView=(RecyclerView)view.findViewById(R.id.managersRecyclerView);
setLayoutManager(新的LinearLayoutManager(getContext());
setAdapter(新的ManagerListAdapter(getManagers());
//getRemoteManager();
}
私有void getRemoteManager(){
ApiObject client=ServiceGenerator.createService(ApiObject.class);
Call Call=client.getManagers();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
List managers=response.body();//我想在RecyclerAdapter中添加此列表
分拣员(经理);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
私有列表管理器(){
//这是测试用的。
列表管理器=新的ArrayList();
添加(新经理到(“Alex Pavlov”,100));
添加(新的管理者到(“Ivan Pavlov”,95));
添加(新的经理到(“Petr Pavlov”,99));
添加(新的ManagerDTO(“Stepan Pavlov”,100));
添加(新的经理到(“Azik Pavlov”,100));
添加(新的管理者到(“Azik Myand”,100));
添加(新的经理到(“Azik Specca”,50));
添加(新ManagerDTO(“Azik Kane”,0));
添加(新经理到(“Azik McDonald”,99));
添加(新的经理到(“Azik Jagr”,1));
分拣员(经理);
回报经理;
}

我们可以将
RxJava
RxAndroid
Retrifit2
一起使用

服务生成器:

private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
                    .baseUrl(Const.URL.UrlService)
                    .addConverterFactory(JacksonConverterFactory.create());


   public static <S> S createService(Class<S> serviceClass) {

        Retrofit retrofit = builder.build();
        return retrofit.create(serviceClass);
    }
}
ApiObject service = ServiceGenerator.createService(ApiObject.class);
        Observable<List<ManagerDTO>> observManagers = service.getManagers();
        observManagers
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<List<ManagerDTO>>() {
                    @Override
                    public void onCompleted() {
                        //do nothing
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("OnError", e.getMessage());
                        Toast.makeText(context, R.string.toast_connection_false, Toast.LENGTH_SHORT).show();
                        initRecyclerView(Cache.getManagers());
                        managersSwipe.setRefreshing(false);
                    }

                    @Override
                    public void onNext(List<ManagerDTO> managers) {
                        Log.e("OnNext", "Connect is OK");
                        sortManagers(managers);
                        Cache.setManagerDTO(managers);
                        initRecyclerView(managers);
                        managersSwipe.setRefreshing(false);

                        //Copy to db
                        RealmHelper helper = new RealmHelper(context);
                        helper.copyToRealmOrUpdate(managers);
                        Log.e("RealmCopy", "it's ok");
                    }
                });
    }
私人静态改装.Builder=
新的改型.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
.baseUrl(Const.URL.UrlService)
.addConverterFactory(JacksonConverterFactory.create());
公共静态S createService(类serviceClass){
改装改装=builder.build();
返回改装。创建(serviceClass);
}
}
请求:

private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
                    .baseUrl(Const.URL.UrlService)
                    .addConverterFactory(JacksonConverterFactory.create());


   public static <S> S createService(Class<S> serviceClass) {

        Retrofit retrofit = builder.build();
        return retrofit.create(serviceClass);
    }
}
ApiObject service = ServiceGenerator.createService(ApiObject.class);
        Observable<List<ManagerDTO>> observManagers = service.getManagers();
        observManagers
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<List<ManagerDTO>>() {
                    @Override
                    public void onCompleted() {
                        //do nothing
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("OnError", e.getMessage());
                        Toast.makeText(context, R.string.toast_connection_false, Toast.LENGTH_SHORT).show();
                        initRecyclerView(Cache.getManagers());
                        managersSwipe.setRefreshing(false);
                    }

                    @Override
                    public void onNext(List<ManagerDTO> managers) {
                        Log.e("OnNext", "Connect is OK");
                        sortManagers(managers);
                        Cache.setManagerDTO(managers);
                        initRecyclerView(managers);
                        managersSwipe.setRefreshing(false);

                        //Copy to db
                        RealmHelper helper = new RealmHelper(context);
                        helper.copyToRealmOrUpdate(managers);
                        Log.e("RealmCopy", "it's ok");
                    }
                });
    }
ApiObject服务=ServiceGenerator.createService(ApiObject.class);
ObservableManagers=service.getManagers();
观察者经理
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
//无所事事
}
@凌驾
公共无效申报人(可丢弃的e){
Log.e(“OnError”,e.getMessage());
Toast.makeText(context,R.string.Toast\u connection\u false,Toast.LENGTH\u SHORT.show();
initRecyclerView(Cache.getManagers());
managersSwipe.setRefreshing(false);
}
@凌驾
public void onNext(列表管理器){
Log.e(“OnNext”,“连接正常”);
分拣员(经理);
Cache.setManagerDTO(managers);
initRecyclerView(经理);
managersSwipe.setRefreshing(false);
//复制到数据库
RealmHelper helper=新的RealmHelper(上下文);
helper.copyToRealmOrUpdate(管理者);
Log.e(“RealmCopy”,“没问题”);
}
});
}

是的,RxJava将是一个完美的选择,因为改型在库本身提供了RxJava支持。AsyncTask也可以用作替代方案。