addAll()方法不受RealmResults支持。

4

我在使用Realm 2.0.1版本时发现addAll()方法已经被弃用,我需要一种替代方法来实现从API获取所有数据,将其保存到数据库并传递到我的适配器。 我如何做到这一点?请注意,不要删除任何HTML标记。

  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.

pediosItensRealmResult 还是 RealmList 的对象? - Mohammed Atif
@MohammedAtif pedidosItens 是一个 RealmResults。 - AND4011002849
我会更喜欢使用 List<Pedidos> pedidosItens = new ArrayList<>(),因为在 Realm 上执行操作时,RealmResultRealmList 更受青睐,但对于其他操作,最好使用 List - Mohammed Atif
而且,总的来说,当您直接使用RealmQuery进行初始化时,应使用RealmResult,否则您必须使用RealmList - Mohammed Atif
@EpicPandaForce 我已经更新了问题。 - AND4011002849
显示剩余3条评论
1个回答

5
那是因为RealmResults只是满足查询条件的指针集合。您不能操纵它,如果您只打算在适配器中显示每个元素,则也不应该操纵它。
事实上,Realm专门设计了简化“在后台线程下载数据并将其保存在数据库中”的工作流程,“自动在UI线程上显示已在后台线程中下载的数据”。这就是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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接