Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro datatype mismatch (code 20)

To recebendo o erro datatype mismatch (code20) quando tento resgatar os dados do servidor. Segue o log:

E/SQLiteLog: (20) statement aborts at 5: [INSERT INTO alunos(caminhoFoto,nome,nota,id,endereco,site,telefone) VALUES (?,?,?,?,?,?,?)] datatype mismatch
E/SQLiteDatabase: Error inserting caminhoFoto=a nome=carlos nota=10.0 id=094c98c3-86cc-4554-b0d1-7f0c404d8723 endereco=rua do carlos site=www.sitedojoao.com.br telefone=3213122
                  android.database.sqlite.SQLiteDatatypeMismatchException: datatype mismatch (code 20)
                      at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
                      at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
                      at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
                      at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
                      at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1474)
                      at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
                      at com.example.mayke.agenda.dao.AlunoDAO.insere(AlunoDAO.java:92)
                      at com.example.mayke.agenda.dao.AlunoDAO.SincronizaAlunosDoServidor(AlunoDAO.java:193)
                      at com.example.mayke.agenda.ListaAlunosActivity$2.onResponse(ListaAlunosActivity.java:83)
                      at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
                      at android.os.Handler.handleCallback(Handler.java:751)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6119)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
4 respostas

Oi Mayke, tudo bem?

Você pode mandar o código do seu DAO? Dessa forma eu posso verificar o possível erro.

[]s

solução!

Opa Mayke, acabei de ver o seu código, a parte da Migration está certinha, provavelmente o detalhe está em ter deixado o onCreate() (método que cria a tabela) ainda com o tipo INTEGER, ou seja, ele precisa manter o mesmo tipo conforme a última atualização que você fez no banco.

Um outro detalhe que provavelmente você já sabe, mas eu vou adiantar, é que no método que você pega os alunos (getDadosAluno()), você não está pegando o id deles, ou seja, é necessario indicar que deseja essa informação também.

Muito provalmente o problema aconteceu por você ter perdido as informações da App, desinstalando-a ou apagando as informações manualmente, então, quando a tabela foi criada novamente, manteve o tipo INTEGER que não é mais compatível.

Faça o ajuste para que o id mantenha o tipo esperado CHAR(36) e veja se funciona desinstalando a App ou apagando as informações dela.

[]s

Funcionou. Brigadão!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software