Se eu deixo modo offline o emulador funciona, mas ao ligar a internet e rotacionar fecha o app e apresenta essa mensagem:
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{f3ffb3b position=3 id=-1, oldPos=0, pLpos:0 scrap [attachedScrap] tmpDetached no parent} androidx.recyclerview.widget.RecyclerView{24f53fc VFED..... .F....I. 0,0-1080,1584 #7f080044 app:id/activity_lista_produtos_lista}, adapter:br.com.estoque.ui.recyclerview.adapter.ListaProdutosAdapter@845ba85, layout:androidx.recyclerview.widget.LinearLayoutManager@c6320da, context:br.com.estoque.ui.activity.ListaProdutosActivity@db11ffd
Antes, apenas modo online, estava funcionando.
Arquivo ProdutoDAO.java
package br.com.estoque.database.dao;
import java.util.List;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Update;
import br.com.estoque.model.Produto;
@Dao
public interface ProdutoDAO {
@Insert
long salva(Produto produto);
@Update
void atualiza(Produto produto);
@Query("SELECT * FROM Produto")
List<Produto> buscaTodos();
@Query("SELECT * FROM Produto WHERE id = :id")
Produto buscaProduto(long id);
@Delete
void remove(Produto produto);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void salva(List<Produto> produtos);
}
ARQUIVO ListaProdutosActivity.java:
private void buscaProdutos() {
new BaseAsyncTask<>(dao::buscaTodos,
resultado -> adapter.atualiza(resultado))
.execute();
ProdutoService service = new EstoqueRetrofit().getProdutoService();
Call<List<Produto>> call = service.buscaTodos();
new BaseAsyncTask<>(() -> {
try {
Response<List<Produto>> resposta = call.execute();
List<Produto> produtosNovos = resposta.body();
dao.salva(produtosNovos);
} catch (IOException e) {
e.printStackTrace();
}
return dao.buscaTodos();
}, produtosNovos -> {
if(produtosNovos != null){
adapter.atualiza(produtosNovos);
} else {
Toast.makeText(this,
"Não possível buscar os produtos da API" + produtosNovos,
Toast.LENGTH_SHORT).show();
}
}).execute();
}