1
resposta

Após procedimento da aula, só funciona offline

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();
        }
1 resposta

Kennedy, de boa ?

Cara vi que teu erro foi por tentar acessar um campo que não existia na listagem, consegue dar uma olhada nisso ? Isso tá rolando na sua ListaProdutosActivity