jberkel / sms-backup-plus

Backup Android SMS, MMS and call log to Gmail / Gcal / IMAP
https://play.google.com/store/apps/details?id=com.zegoggles.smssync
Apache License 2.0
1.8k stars 497 forks source link

Manual (and automatic) backup doesn't work (Unfortunately, SMS Backup+ has stopped) #870

Closed dofer404 closed 6 years ago

dofer404 commented 6 years ago

I'm having this issue for a while now. Each time I hit the BACKUP button the application crashes and a message pops up on screen "Unfortunately, SMS Backup+ has stopped" The same happens each time an automatic backup is triggered (the message pops up on screen).

Expected behaviour

I tap on the BACKUP button, the application shows the messages: "Working, logging in...", then "Working, calculating...", and then backs up any non backed up messages and call logs without crashing.

Actual behaviour

I tap on the BACKUP button, the application shows the messages: "Working, logging in...", then "Working, calculating...", and then the application closes completely, living me on the home screen with the message "Unfortunately, SMS Backup+ has stopped"

Steps to reproduce the behaviour

  1. Open the app
  2. (If you haven't connected your GMail account, do so)
  3. Tap the BACKUP button

Specifications:

dofer404 commented 6 years ago

I have compiled from source and I have run the application in debug mode to find out where is the application crashing, it seems it crashes on the first call to:

com/zegoggles/smssync/mail/PersonLookup.java:51 Cursor c = mResolver.query(personUri, PHONE_PROJECTION, null, null, null);

with call stack:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                  Process: com.zegoggles.smssync, PID: 26993
                  java.lang.RuntimeException: An error occurred while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:309)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: java.lang.IllegalArgumentException: column 'data1' does not exist
                      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
                      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
                      at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
                      at android.content.ContentResolver.query(ContentResolver.java:498)
                      at android.content.ContentResolver.query(ContentResolver.java:441)
                      at com.zegoggles.smssync.mail.PersonLookup.lookupPerson(PersonLookup.java:51)
                      at com.zegoggles.smssync.mail.MessageGenerator.messageFromMapSms(MessageGenerator.java:83)
                      at com.zegoggles.smssync.mail.MessageGenerator.messageForDataType(MessageGenerator.java:72)
                      at com.zegoggles.smssync.mail.MessageConverter.convertMessages(MessageConverter.java:115)
                      at com.zegoggles.smssync.service.BackupTask.backupCursors(BackupTask.java:269)
                      at com.zegoggles.smssync.service.BackupTask.fetchAndBackupItems(BackupTask.java:153)
                      at com.zegoggles.smssync.service.BackupTask.acquireLocksAndBackup(BackupTask.java:133)
                      at com.zegoggles.smssync.service.BackupTask.doInBackground(BackupTask.java:126)
                      at com.zegoggles.smssync.service.BackupTask.doInBackground(BackupTask.java:49)
                      at android.os.AsyncTask$2.call(AsyncTask.java:295)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                      at java.lang.Thread.run(Thread.java:818) 
E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab5c2b40
jberkel commented 6 years ago

thanks, that is a weird bug. maybe some numbers are stored in a different table? i'll see if there's a better fix for this, if not we can just the try/catch solution.