Deciphering an "java.lang.IllegalStateException" error message after syncing

Dear ODK folks,

We are using the ODK 2.0 tools and have sporadically had a bug crop up when syncing. Everything works fine in Survey for collecting the data, Services syncs fine, ODK tables reopens fine, but then when we go to a particular table (in Tables) or form (in Survey) we have an error. In Tables, it just plain crashes and dumps us out. In Survey, we get a message “java.lang.IllegalStateException: via RemoteException on AidlDbInterface: or.gopendatakit|java.lang.IllegalStateException: Requested column: 45 has two or more data types in it”


Help much appreciated on:

  1. What might be causing this error/what it means? It seems to be implying we managed to put two types of data in one question, but not quite sure how we had achieved that.
  2. How java/ODK would be “counting” columns so that we could identify which column this is referring to? Does it could the ones we see in Tables, the ones we see in aggregate, or some other order to get to column 45? Then we can at least look at which of our (many) variables might have an issue.

Thanks much!


Hi again ODK folks!

Been testing this (and replicating, alas) further and wanted to share in case it helps with diagnosis. We have multiple different “data collectors” and so when we log in and sync as “another” data collector than the one that originated the problem, their tables open fine, survey works, etc.

Any help much appreciated :slight_smile:



What version of Services/Tables/Survey are you using?

Dear Waylon,

We are still using v2.0.3 because that’s what we trained folks on and is set up for the field. Is this something that was solved in v2.0.4? We can try to switch but it may not be easy with going into the field.



Another fun fact about this problem: it only comes up on certain tablets. Our Huawei with Android 7.0 has this problem, our Elecost with Android 6.0 does not (I use the same login and sync; one shows the data and works, the other crashes). This is possibly related to which one originated/imported an observation as they bounced back and forth…

The exception was intended to be thrown when the SQLite database determines that a column contains more than 1 data type, for example some rows have numbers and some rows have text.

Do you have any field in your survey that might exhibit this property?

But it’s weird that you only see the exception on some devices. That makes me think that the exception might have been triggered by other reasons.

After more investigation with Li and Waylon, we discovered that the issue was caused by our acknowledge prompt. There is inconsistency in our system with how the underlying boolean value is stored. We will be addressing this issue as soon as we can. Caroline, thanks for finding this issue and reporting it!

Issue filed:

This is generally the exception to throw if the invocation is illegal because of the state of the receiving object. It signals that a method has been invoked at an illegal or inappropriate time. In other words, the Java environment or Java application is not in an appropriate state for the requested operation. for ex. , in case of java.util.List collection, we use next() method of the ListIterator interface to traverse through the java.util.List. If we call the remove() method of the ListIterator interface before calling the next() method then this exception will be thrown as it will leave the List collection in an unstable state.

1 Like

@rickberon thanks for participating in the ODK-X forum. We value participation.

However, I would like to be clear that that this issue was already fixed and closed so there is no confusion.