Search code examples
androidandroid-sqliteurbanairship.com

Application crashes on installation with error sqlite3_exec - Failed to set synchronous mode = 1(Normal)


I'm running my application on Samsung Note with android version 4.0.4.

It's not crashing on devices like Samsung POP which is running android 2.2. And on Motorola Xoom running Androi 3.1.

When I'm installing my application It shows black screen then after some time shows popup that application is stop, and my application splash screen loading behind this dialog when I press ok that dialog disappears and I can go to my Application login screen.

12-13 18:33:53.823: I/ActivityThread(14608): Pub com.android.mypype.urbanairship.provider: com.urbanairship.UrbanAirshipProvider
12-13 18:33:53.833: I/Inside MyPype(14608):  Application Class
12-13 18:33:54.423: D/myPype - UALib(14608): Airship Take Off! Lib Version: 2.0.1 / App key = xsXcmKOoRe6gog9onrQHjA
12-13 18:33:54.423: D/myPype - UALib(14608): In Production? false
12-13 18:33:54.713: D/myPype - UALib(14608): Initializing Push.
12-13 18:33:54.718: D/myPype - UALib(14608): Initializing Analytics.
12-13 18:33:54.938: I/SqliteDatabaseCpp(14608): sqlite returned: error code = 5, msg = database is locked, db=xxx

    12-12 11:57:09.553: E/SqliteDatabaseCpp(3608): sqlite3_exec - Failed to set synchronous mode = 1(Normal) 
    12-12 11:57:09.553: E/SQLiteDatabase(3608): Failed to open the database. closing it.
    12-12 11:57:09.553: E/SQLiteDatabase(3608): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1132)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1083)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1170)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:844)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:228)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at com.urbanairship.analytics.EventDataManager.<init>(Unknown Source)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at com.urbanairship.analytics.Analytics.<init>(Unknown Source)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at com.urbanairship.UAirship.takeOff(Unknown Source)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at com.android.mypype.MypypeApplication.onCreate(MypypeApplication.java:133)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:972)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3965)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.app.ActivityThread.access$1300(ActivityThread.java:127)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.os.Handler.dispatchMessage(Handler.java:99)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.os.Looper.loop(Looper.java:137)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at android.app.ActivityThread.main(ActivityThread.java:4511)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at java.lang.reflect.Method.invokeNative(Native Method)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at java.lang.reflect.Method.invoke(Method.java:511)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
    12-12 11:57:09.553: E/SQLiteDatabase(3608):     at dalvik.system.NativeStart.main(Native Method)
    12-12 11:57:09.553: E/myPype - UALib(3608): Unable to open Analytics Event DB


    12-12 11:57:37.958: E/myPype - UALib(3608): Unable to get DB size. Database not open.
    12-12 11:57:37.963: E/myPype - UALib(3608): Unable to insert event. Database not open.

In above error why It's pointing to Application class Urbanairship.takeOff() method.

I am searching for this issue but doesn't get anything yet. I am not able to figure it out. I tried synchronizing Locks on database operation in openHelper calss.

any help will be appreciated.

In my Application class I added below code to for Urbanairship.

  @Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
// This can be done in code as illustrated here,
        // or you can add these settings to a properties file
        // called airshipconfig.properties
        // and place it in your "assets" folder
        AirshipConfigOptions options = AirshipConfigOptions
                .loadDefaultOptions(this);

         // Take off initializes the services


        UAirship.takeOff(this, options);

        PushManager.enablePush();
}

Solution

  • I figure it out but not the solution it's just a fix. I just handle the exception so app can't get crash.

    How sad no one went through this actually it's for higher versions such as 4.0.4. So, I got one thing that it may be Urbairships new lib. fault because it's trying to write database (i read some events or something).

    I don't understand how to solve so I handled this exception.

    So, solution is you have to write your code under try-catch block and specify exception for handling in catch.