RealmResults不支持addAll()方法

时间:2016-10-09 05:00:21

标签: java android realm retrofit deprecated

我可以在我的适配器中使用什么代替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.

1 个答案:

答案 0 :(得分:3)

那是因为<input ng-model="smthn" ng-init="">只是一组满足查询中定义的条件的指针。你不能操纵它,如果你只想打算你的适配器中的每个元素,你也不应该操纵它。

事实上,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"

这是RealmResults的用途。

简单地说,所有这些代码都是不必要的:

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, ...
    }
}

为此,请使用RealmRecyclerViewAdapter,除非您打算手动处理public class PedidosAdapter extends RealmRecyclerViewAdapter<Pedidos, PedidosViewHolder> { public PedidosAdapter(Context context, RealmResults<Pedidos> results) { super(context, results, true); } // onBindViewHolder // onCreateViewHolder }