【问题标题】:addAll() method is not supported by RealmResultsRealmResults 不支持 addAll() 方法
【发布时间】:2016-10-09 05:00:20
【问题描述】:

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

【问题讨论】:

  • pediosItensRealmResultRealmList 的对象?
  • @MohammedAtif pedidosItens 是一个 RealmResults
  • 我更喜欢List&lt;Pedidos&gt; pedidosItens = new ArrayList&lt;&gt;(),因为在Realm上执行操作时首选RealmResultRealmList,但对于其他操作,最好使用List
  • 加起来就是RealmResult,直接用RealmQuery初始化就用RealmQuery,其他情况必须用RealmList
  • padidosItens 必须是 RealmListRealmResult 是不可变的。

标签: java android realm retrofit deprecated


【解决方案1】:

那是因为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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2020-04-23
    • 2020-04-13
    • 2020-12-06
    • 2019-12-17
    相关资源
    最近更新 更多