RealmResults 不支持 addAll() 方法

addAll() method is not supported by RealmResults

我可以在我的适配器中使用什么来代替 addAll() 方法,我使用的是领域版本 2.0.1 并且该方法已被弃用,我正在尝试从 API 获取所有数据,将其保存到我的数据库并将其传递给我的适配器,我正在使用这样的:

  public void getData(int page) {
    if (GlobalModel.existeConexao()) {

        Call<PedidosResponse> call = ((NavigationMain) getActivity()).apiService.getPedidos(GlobalModel.getToken(), GlobalModel.geEmpresaId(), page);
        call.enqueue(new Callback<PedidosResponse>() {
            @Override
            public void onResponse(Call<PedidosResponse> call, Response<PedidosResponse> response) {
                if (response.isSuccessful()) {
                    for (int i = 0; i < response.body().getPedidos().size(); i++) {
                        Pedidos mPedido = response.body().getPedidos().get(i);
                        int myInt = (mPedido.isProjecao()) ? 1 : 0;
                        if (!mRepositorio.checkIfExists(mPedido.getId())) {
                            mRepositorio.addPedido(mPedido.getId(), mPedido.getCliente_id(), mPedido.getData_hora(), mPedido.getData_pedido_cliente(), mPedido.getPrevisao_entrega(), mPedido.getFrete_tipo(), myInt, mPedido.getObservacao(), mPedido.getAliquota_projecao(), mPedido.getStatus(), mPedido.getPedido_cliente());

                        }
                    }
                    arraypedidos = mRepositorio.findAllPedidos();

                    if (mPedidosAdapter == null) {
                        mPedidosAdapter = new PedidosAdapter(getActivity(), arraypedidos);
                        listpedidos.setAdapter(mPedidosAdapter);
                    } else {
                        mPedidosAdapter.setData(arraypedidos);
                    }


                }
            }

            @Override
            public void onFailure(Call<PedidosResponse> call, Throwable t) {
                if (t.getMessage() != null) {
                    Log.v("pedidos", t.getMessage());
                }

            }
        });

    } else {
        Toast.makeText(getActivity(), "Verifique sua conexão", Toast.LENGTH_SHORT).show();
    }

}

但是当我 运行 应用程序时,我收到此消息:

java.lang.UnsupportedOperationException: This method is not supported by RealmResults.

那是因为RealmResults只是一组满足查询中定义的条件的指针。你不能操纵它,如果你只是想显示你的适配器中的每个元素,你也不应该。

其实Realm was explicitly designed to simplify the workflow of "downloading data on a background thread and saving the data in a database", and "showing the data downloaded on a background thread automatically on the UI thread"

这就是 RealmChangeListener 的用途。

简而言之,所有这些代码都是不必要的:

                arraypedidos = mRepositorio.findAllPedidos();

                if (mPedidosAdapter == null) {
                    mPedidosAdapter = new PedidosAdapter(getActivity(), arraypedidos);
                    listpedidos.setAdapter(mPedidosAdapter);
                } else {
                    mPedidosAdapter.setData(arraypedidos);
                }

并且可以替换为:

public class SomeActivity extends AppCompatActivity {
    PedidosAdapter pedidosAdapter;

    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.some_view);
        pedidosAdapter = new PedidosAdapter(context, mRepositorio.findAllPedidos());
        // set adapter, ...
    }
}

public class PedidosAdapter extends RealmRecyclerViewAdapter<Pedidos, PedidosViewHolder> {
    public PedidosAdapter(Context context, RealmResults<Pedidos> results) {
        super(context, results, true);
    }

    // onBindViewHolder

    // onCreateViewHolder
}

为此,请使用 RealmRecyclerViewAdapter,除非您打算手动处理 RealmChangeListener