diff --git a/README.md b/README.md index eab899388405ee4c150ea4657b89bb969b9d0624..6dee6ffd8e329f6616a5e0705bddf40c0cc9dabb 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Edit your **build.gradle** file and add below dependency. ``` groovy dependencies { - implementation 'org.litepal.guolindev:core:3.2.1' + implementation 'org.litepal.guolindev:core:3.2.2' } ``` @@ -451,9 +451,10 @@ If you find any bug when using LitePal, please report **[here](https://github.co ## Change logs -### 3.2.1 +### 3.2.2 * Support database index by adding @Column(index = true) on field. * Adding return value for **runInTransaction()** function for Kotlin. + * Fix known bugs. ### 3.1.1 * Support transaction. diff --git a/core/build.gradle b/core/build.gradle index c4d16e5625eeb6c48b7e0ccb9bdf98fede45d432..a644d89efec1ebb1060f06b4dff94009c7174f4c 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -28,29 +28,29 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } -apply plugin: 'com.novoda.bintray-release' - -allprojects { - tasks.withType(Javadoc) { - options.addStringOption('Xdoclint:none', '-quiet') - options.addStringOption('encoding', 'UTF-8') - } -} - -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.novoda:bintray-release:0.9.2' - } -} - -publish { - userOrg = 'sinyu890807' - groupId = 'org.litepal.guolindev' - artifactId = 'core' - publishVersion = '3.2.1' - desc = 'An Android library that allows developers to use SQLite database extremely easy' - website = 'https://github.com/LitePalFramework/LitePal' -} \ No newline at end of file +//apply plugin: 'com.novoda.bintray-release' +// +//allprojects { +// tasks.withType(Javadoc) { +// options.addStringOption('Xdoclint:none', '-quiet') +// options.addStringOption('encoding', 'UTF-8') +// } +//} +// +//buildscript { +// repositories { +// jcenter() +// } +// dependencies { +// classpath 'com.novoda:bintray-release:0.9.2' +// } +//} +// +//publish { +// userOrg = 'sinyu890807' +// groupId = 'org.litepal.guolindev' +// artifactId = 'core' +// publishVersion = '3.2.2' +// desc = 'An Android library that allows developers to use SQLite database extremely easy' +// website = 'https://github.com/LitePalFramework/LitePal' +//} \ No newline at end of file diff --git a/core/src/main/java/org/litepal/crud/DataHandler.java b/core/src/main/java/org/litepal/crud/DataHandler.java index 88b79cd9302c424d04c5efa7f78d42bb5c8e3508..3bc0de53ea783b7af67e0ad39781c42e07493c03 100644 --- a/core/src/main/java/org/litepal/crud/DataHandler.java +++ b/core/src/main/java/org/litepal/crud/DataHandler.java @@ -1320,6 +1320,7 @@ abstract class DataHandler extends LitePalBase { private void setToModelByReflection(Object modelInstance, Field field, int columnIndex, String getMethodName, Cursor cursor) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Class cursorClass = cursor.getClass(); + if (cursor.isNull(columnIndex)) return; Method method = cursorClass.getMethod(getMethodName, int.class); Object value = method.invoke(cursor, columnIndex); if (field.getType() == boolean.class || field.getType() == Boolean.class) { diff --git a/sample/src/androidTest/java/com/litepaltest/test/LitePalTestCase.java b/sample/src/androidTest/java/com/litepaltest/test/LitePalTestCase.java index bc872802f42ede60fefe0234c5702f50e60f5db0..baea0cfa501f5a87272842f57efcd3e1e03890da 100644 --- a/sample/src/androidTest/java/com/litepaltest/test/LitePalTestCase.java +++ b/sample/src/androidTest/java/com/litepaltest/test/LitePalTestCase.java @@ -135,7 +135,10 @@ public class LitePalTestCase { do { long id = cursor.getLong(cursor.getColumnIndexOrThrow("id")); String bookName = cursor.getString(cursor.getColumnIndexOrThrow("bookname")); - int pages = cursor.getInt(cursor.getColumnIndexOrThrow("pages")); + Integer pages = null; + if (!cursor.isNull(cursor.getColumnIndexOrThrow("pages"))) { + pages = cursor.getInt(cursor.getColumnIndexOrThrow("pages")); + } double price = cursor.getDouble(cursor.getColumnIndexOrThrow("price")); char level = cursor.getString(cursor.getColumnIndexOrThrow("level")).charAt(0); short isbn = cursor.getShort(cursor.getColumnIndexOrThrow("isbn")); diff --git a/sample/src/androidTest/java/com/litepaltest/test/crud/query/QueryBasicKotlinTest.kt b/sample/src/androidTest/java/com/litepaltest/test/crud/query/QueryBasicKotlinTest.kt index 66c7ea873573ece1bb73e1240497231e31271d49..bffd6a05dde6a3b63fb95b7203146cf012db2a4f 100644 --- a/sample/src/androidTest/java/com/litepaltest/test/crud/query/QueryBasicKotlinTest.kt +++ b/sample/src/androidTest/java/com/litepaltest/test/crud/query/QueryBasicKotlinTest.kt @@ -96,7 +96,7 @@ class QueryBasicKotlinTest : LitePalTestCase() { val realBook = realBooks[i] assertEquals(expectBook.id, realBook.id) assertEquals(expectBook.bookName, realBook.bookName) - assertEquals(expectBook.pages, realBook.pages) + assertEquals(expectBook.pages as Int?, realBook.pages as Int?) assertEquals(expectBook.price, realBook.price) assertEquals(expectBook.area, realBook.area) assertEquals(expectBook.isbn, realBook.isbn) @@ -113,7 +113,7 @@ class QueryBasicKotlinTest : LitePalTestCase() { val realFirstBook = LitePal.findFirst() assertEquals(expectedFirstBook.id, realFirstBook!!.id) assertEquals(expectedFirstBook.bookName, realFirstBook.bookName) - assertEquals(expectedFirstBook.pages, realFirstBook.pages) + assertEquals(expectedFirstBook.pages as Int?, realFirstBook.pages as Int?) assertEquals(expectedFirstBook.price, realFirstBook.price) assertEquals(expectedFirstBook.area, realFirstBook.area) assertEquals(expectedFirstBook.isbn, realFirstBook.isbn) diff --git a/sample/src/androidTest/java/com/litepaltest/test/crud/query/QueryClusterKotlinTest.kt b/sample/src/androidTest/java/com/litepaltest/test/crud/query/QueryClusterKotlinTest.kt index b416f083912097832e14997f9e65979c6623aa09..9a7a6192033a6f857fd425cc821df18ef7aef9a1 100644 --- a/sample/src/androidTest/java/com/litepaltest/test/crud/query/QueryClusterKotlinTest.kt +++ b/sample/src/androidTest/java/com/litepaltest/test/crud/query/QueryClusterKotlinTest.kt @@ -114,7 +114,7 @@ class QueryClusterKotlinTest : LitePalTestCase() { if (i == 0) { assertEquals(firstBook!!.isSaved, book.isSaved) assertEquals(firstBook.bookName, book.bookName) - assertEquals(firstBook.pages, book.pages) + assertEquals(firstBook.pages as Int?, book.pages as Int?) assertEquals(firstBook.isPublished, book.isPublished) assertEquals(firstBook.price, book.price) assertEquals(firstBook.area, book.area) @@ -125,7 +125,7 @@ class QueryClusterKotlinTest : LitePalTestCase() { if (i == books.size - 1) { assertEquals(lastBook!!.isSaved, book.isSaved) assertEquals(lastBook.bookName, book.bookName) - assertEquals(lastBook.pages, book.pages) + assertEquals(lastBook.pages as Int?, book.pages as Int?) assertEquals(lastBook.isPublished, book.isPublished) assertEquals(lastBook.price, book.price) assertEquals(lastBook.area, book.area) @@ -148,7 +148,7 @@ class QueryClusterKotlinTest : LitePalTestCase() { if (i == 0) { assertEquals(inverseFirstBook!!.isSaved, book.isSaved) assertEquals(inverseFirstBook.bookName, book.bookName) - assertEquals(inverseFirstBook.pages, book.pages) + assertEquals(inverseFirstBook.pages as Int?, book.pages as Int?) assertEquals(inverseFirstBook.isPublished, book.isPublished) assertEquals(inverseFirstBook.price, book.price) assertEquals(inverseFirstBook.area, book.area) @@ -159,7 +159,7 @@ class QueryClusterKotlinTest : LitePalTestCase() { if (i == books.size - 1) { assertEquals(inverseLastBook!!.isSaved, book.isSaved) assertEquals(inverseLastBook.bookName, book.bookName) - assertEquals(inverseLastBook.pages, book.pages) + assertEquals(inverseLastBook.pages as Int?, book.pages as Int?) assertEquals(inverseLastBook.isPublished, book.isPublished) assertEquals(inverseLastBook.price, book.price) assertEquals(inverseLastBook.area, book.area) @@ -179,7 +179,7 @@ class QueryClusterKotlinTest : LitePalTestCase() { val firstBook = LitePal.findFirst() assertTrue(firstBook!!.isSaved) assertEquals(firstBook.bookName, book.bookName) - assertEquals(firstBook.pages, book.pages) + assertEquals(firstBook.pages as Int?, book.pages as Int?) assertEquals(firstBook.isPublished, book.isPublished) assertEquals(firstBook.area, book.area) assertEquals(firstBook.price, book.price) @@ -193,7 +193,7 @@ class QueryClusterKotlinTest : LitePalTestCase() { val lastBook = LitePal.findLast(Book::class.java) assertTrue(lastBook!!.isSaved) assertEquals(lastBook.bookName, book.bookName) - assertEquals(lastBook.pages, book.pages) + assertEquals(lastBook.pages as Int?, book.pages as Int?) assertEquals(lastBook.isPublished, book.isPublished) assertEquals(lastBook.area, book.area) assertEquals(lastBook.price, book.price) @@ -213,7 +213,7 @@ class QueryClusterKotlinTest : LitePalTestCase() { val expectedBooks = getBooks(null, null, null, null, null, null, null) val expectedBook = expectedBooks[1] assertEquals(expectedBook.bookName, book.bookName) - assertEquals(expectedBook.pages, book.pages) + assertEquals(expectedBook.pages as Int?, book.pages as Int?) assertEquals(expectedBook.isPublished, book.isPublished) assertEquals(expectedBook.area, book.area) assertEquals(expectedBook.price, book.price) diff --git a/sample/src/androidTest/java/com/litepaltest/test/crud/save/SaveTest.java b/sample/src/androidTest/java/com/litepaltest/test/crud/save/SaveTest.java index a5ff855f84e0abaa31dc07660980706e2213e181..800d4692c0d25256f0906daa0f467aa8d573129e 100644 --- a/sample/src/androidTest/java/com/litepaltest/test/crud/save/SaveTest.java +++ b/sample/src/androidTest/java/com/litepaltest/test/crud/save/SaveTest.java @@ -2,6 +2,7 @@ package com.litepaltest.test.crud.save; import android.support.test.filters.SmallTest; +import com.litepaltest.model.Book; import com.litepaltest.model.Cellphone; import com.litepaltest.model.Classroom; import com.litepaltest.model.Computer; @@ -20,6 +21,7 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import static junit.framework.Assert.assertNotNull; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertNull; @@ -245,4 +247,21 @@ public class SaveTest extends LitePalTestCase { assertEquals(Long.MAX_VALUE, idCardFromDB.getSerial()); } + @Test + public void testNullValue() { + Book book = new Book(); + book.setBookName("First Line of Android"); + assertTrue(book.save()); + Book bookFromDB = LitePal.find(Book.class, book.getId()); + assertNotNull(bookFromDB); + assertNull(bookFromDB.getPages()); // pages should be null cause it's Integer type and assign no value. + + book.setPages(123); // assign pages + assertTrue(book.save()); + bookFromDB = LitePal.find(Book.class, book.getId()); + assertNotNull(bookFromDB); + assertNotNull(bookFromDB.getPages()); // now we should be pages value. + assertEquals(Integer.valueOf(123), book.getPages()); + } + } \ No newline at end of file