2016-10-09 3 views
2

Что можно использовать вместо метода addAll() в моем адаптере, я использую версию 2.01 в режиме реального времени, и этот метод устарел, я пытаюсь получить все данные от API, сохраните его в свою базу данных и передать его на мой адаптер, я использую как это:Метод addAll() не поддерживается RealmResults

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. 
+0

- объект 'pediosItens'' RealmResult' или 'RealmList'? –

+0

@MohammedAtif pedidosItens - это RealmResults – AND4011002849

+0

Я предпочту 'List pedidosItens = new ArrayList <>()' потому что 'RealmResult' или' RealmList' предпочитается, когда вы выполняете операции в Realm, но для других операций предпочтительнее использовать 'List ' –

ответ

3

это потому, что 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.

Смежные вопросы