Closed goober closed 7 years ago
We should have a @Nullable annotation here: https://github.com/liato/android-bankdroid/blob/master/bankdroid-legacy/src/main/java/com/liato/bankdroid/banking/banks/americanexpress/model/AccountActivity.java#L11
And we should fix nullness issues as indicated by Android Studio's excellent Constant conditions and exceptions warning.
In this case I prefer to never return null when the return type is a collection. Instead I prefer to return an empty collection. That will remove the need of a null check everywhere where it is used. But I agree with you that we should start using the static code analysis which are available in Android Studio!
Yes, fixing the getter to never return null
is probably nicer in this particular case.
Android Studio has an excellent set of warnings, but unfortunately I don't know how to run them on CI.
Bankdroid crashes when there are no transactions available for AmericanExpress.
See TransactionDetails L44
Stacktrace:
Fatal Exception: java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference at java.util.ArrayList.addAll(ArrayList.java:188) at com.liato.bankdroid.banking.banks.americanexpress.model.TransactionDetails.getTransactions(TransactionDetails.java:44) at com.liato.bankdroid.banking.banks.americanexpress.AmericanExpress.transactionsOf(AmericanExpress.java:163) at com.liato.bankdroid.banking.banks.americanexpress.AmericanExpress.fetchTransactionsFor(AmericanExpress.java:157) at com.liato.bankdroid.banking.banks.americanexpress.AmericanExpress.update(AmericanExpress.java:122) at com.liato.bankdroid.DataRetrieverTask.doInBackground(DataRetrieverTask.java:131) at com.liato.bankdroid.DataRetrieverTask.doInBackground(DataRetrieverTask.java:46) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818)