Translate

quarta-feira, 14 de outubro de 2015

Sugar ORM no Android Studio 1.4 com erro android.database.sqlite.SQLiteException: no such table

Foi difícil de achar solução para o problema, restando apenas a tentativa e erro para corrigí-lo.

Muito provável que a troca de versão do Android Studio de 1.3 para 1.4 tenha ocasionado o erro, então segue a solução que encontrei.

No build.gradle (Module app), acrescentar, na seção dependencies a linha

compile 'com.github.satyan:sugar:1.4'
ao invés da sugestão do site


compile 'com.github.satyan:sugar:1.3'
ou

compile 'com.github.satyan:sugar:1.3.1'
No AndroidManifest.xml incluir a expressão


android:name="com.orm.SugarApp"

Na seção <application /> e


<meta-data android:name="DATABASE" android:value="sugar_example.db" />
<meta-data android:name="VERSION" android:value="2" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example" />
entre as seções <application /> e <activity />, lembrando de alterar o DATABASE para o nome do arquivo e DOMAIN PACKAGE NAME para o domínio utilizado (o mesmo que está no item package da seção <manifest />; de preferência alterar o QUERY LOG para false.

Para teste, podemos inserir a classe e exemplo oferecidos no site do ORM:


public class Book extends SugarRecord<Book> {  String title;  String edition;
  public Book(){  }
  public Book(String title, String edition){    this.title = title;    this.edition = edition;  }}
mas com uma modificação, que deve ter sido adotada no versão 1.4 (a versão utilizada no site deve ter sido a 1.3): retire o parâmetro <Book> da primeira linha:


public class Book extends SugarRecord {

Insira um botão na content_main.xml ou no layout criado e insira na propriedade onclick o texto clique.

Na activity correspondente, crie o método clique:


public void clique(View v) {
    Book book = new Book("Title here", "2nd edition");
    book.save();
}
E teste no emulador (sugiro o Genymotion).

Testei e refiz várias vezes para conferir a causa do problema. 
Aparentemente a causa principal era a versão mesmo.