Herry
Herry

Reputation: 7087

Unable to start receiver com.parse.ParseBroadcastReceiver : ConcurrentModificationException

I am getting a crash on Samsung Note 2 with parse sdk version 1.5.1 and below is my Application class code.

@Override
    public void onCreate()
    {       
        super.onCreate();

        try
        {


            Parse.enableLocalDatastore(this);
            // Live acc
            Parse.initialize(this, "XXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX");

            //Enable to receive push
            PushService.setDefaultPushCallback(this, RespondToPushActivity.class);

            Log.d("System out", "Parse ID----> "+ParseInstallation.getCurrentInstallation().getString("deviceToken"));
            Constants.PARSEID = ParseInstallation.getCurrentInstallation().getString("deviceToken");



            ParseInstallation.getCurrentInstallation().saveInBackground();
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }    


    }

Now I got the stacktrace below:

java.lang.RuntimeException: java.util.ConcurrentModificationException

at com.parse.PushRouter$8$1.run(PushRouter.java:235)

at android.os.Handler.handleCallback(Handler.java:730)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:176)

at android.app.ActivityThread.main(ActivityThread.java:5419)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)

at dalvik.system.NativeStart.main(Native Method)

Caused by: java.util.ConcurrentModificationException

at java.util.LinkedList$LinkIterator.next(LinkedList.java:124)

at com.parse.ParseObject.mergeREST(ParseObject.java:928)

at com.parse.OfflineStore$13$2.then(OfflineStore.java:765)

at com.parse.OfflineStore$13$2.then(OfflineStore.java:762)

at com.parse.Task$10.run(Task.java:448)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeImmediately(Task.java:444)

at com.parse.Task.continueWith(Task.java:318)

at com.parse.Task.continueWith(Task.java:329)

at com.parse.Task$8.then(Task.java:381)

at com.parse.Task$8.then(Task.java:373)

at com.parse.Task$11.run(Task.java:481)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeAfterTask(Task.java:477)

at com.parse.Task.continueWithTask(Task.java:353)

at com.parse.Task.onSuccess(Task.java:373)

at com.parse.Task.onSuccess(Task.java:393)

at com.parse.OfflineStore$13.then(OfflineStore.java:762)

at com.parse.OfflineStore$13.then(OfflineStore.java:721)

at com.parse.Task$11.run(Task.java:481)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeAfterTask(Task.java:477)

at com.parse.Task.continueWithTask(Task.java:353)

at com.parse.Task.continueWithTask(Task.java:364)

at com.parse.Task$9.then(Task.java:410)

at com.parse.Task$9.then(Task.java:402)

at com.parse.Task$11.run(Task.java:481)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeAfterTask(Task.java:477)

at com.parse.Task.access$400(Task.java:22)

at com.parse.Task$7.then(Task.java:346)

at com.parse.Task$7.then(Task.java:343)

at com.parse.Task.runContinuations(Task.java:510)

at com.parse.Task.access$800(Task.java:22)

at com.parse.Task$TaskCompletionSource.trySetResult(Task.java:565)

at com.parse.Task$TaskCompletionSource.setResult(Task.java:599)

at com.parse.Task$11$1.then(Task.java:493)

at com.parse.Task$11$1.then(Task.java:485)

at com.parse.Task$10.run(Task.java:448)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeImmediately(Task.java:444)

at com.parse.Task.continueWith(Task.java:318)

at com.parse.Task.continueWith(Task.java:329)

at com.parse.Task$11.run(Task.java:485)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeAfterTask(Task.java:477)

at com.parse.Task.access$400(Task.java:22)

at com.parse.Task$7.then(Task.java:346)

at com.parse.Task$7.then(Task.java:343)

at com.parse.Task.runContinuations(Task.java:510)

at com.parse.Task.access$800(Task.java:22)

at com.parse.Task$TaskCompletionSource.trySetResult(Task.java:565)

at com.parse.Task$TaskCompletionSource.setResult(Task.java:599)

at com.parse.Task$11$1.then(Task.java:493)

at com.parse.Task$11$1.then(Task.java:485)

at com.parse.Task$10.run(Task.java:448)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeImmediately(Task.java:444)

at com.parse.Task.access$300(Task.java:22)

at com.parse.Task$6.then(Task.java:311)

at com.parse.Task$6.then(Task.java:308)

at com.parse.Task.runContinuations(Task.java:510)

at com.parse.Task.access$800(Task.java:22)

at com.parse.Task$TaskCompletionSource.trySetResult(Task.java:565)

at com.parse.Task$TaskCompletionSource.setResult(Task.java:599)

at com.parse.Task$11$1.then(Task.java:493)

at com.parse.Task$11$1.then(Task.java:485)

at com.parse.Task$10.run(Task.java:448)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeImmediately(Task.java:444)

at com.parse.Task.access$300(Task.java:22)

at com.parse.Task$6.then(Task.java:311)

at com.parse.Task$6.then(Task.java:308)

at com.parse.Task.runContinuations(Task.java:510)

at com.parse.Task.access$800(Task.java:22)

at com.parse.Task$TaskCompletionSource.trySetResult(Task.java:565)

at com.parse.Task$TaskCompletionSource.setResult(Task.java:599)

at com.parse.Task$11$1.then(Task.java:493)

at com.parse.Task$11$1.then(Task.java:485)

at com.parse.Task$10.run(Task.java:448)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeImmediately(Task.java:444)

at com.parse.Task.continueWith(Task.java:318)

at com.parse.Task.continueWith(Task.java:329)

at com.parse.Task$11.run(Task.java:485)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)

at java.lang.Thread.run(Thread.java:841)

[7:19:27 PM] Hiren Raval: 2nd once:

[7:19:28 PM] Hiren Raval: java.lang.RuntimeException: Unable to start receiver com.parse.ParseBroadcastReceiver: java.util.ConcurrentModificationException

at android.app.ActivityThread.handleReceiver(ActivityThread.java:2462)

at android.app.ActivityThread.access$1600(ActivityThread.java:157)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1365)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loop(Looper.java:176)

at android.app.ActivityThread.main(ActivityThread.java:5317)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:511)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)

at dalvik.system.NativeStart.main(Native Method)

Caused by: java.util.ConcurrentModificationException

at java.util.LinkedList$LinkIterator.next(LinkedList.java:124)

at com.parse.ParseObject.mergeREST(ParseObject.java:928)

at com.parse.OfflineStore$13$2.then(OfflineStore.java:765)

at com.parse.OfflineStore$13$2.then(OfflineStore.java:762)

at com.parse.Task$10.run(Task.java:448)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeImmediately(Task.java:444)

at com.parse.Task.continueWith(Task.java:318)

at com.parse.Task.continueWith(Task.java:329)

at com.parse.Task$8.then(Task.java:381)

at com.parse.Task$8.then(Task.java:373)

at com.parse.Task$11.run(Task.java:481)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeAfterTask(Task.java:477)

at com.parse.Task.continueWithTask(Task.java:353)

at com.parse.Task.onSuccess(Task.java:373)

at com.parse.Task.onSuccess(Task.java:393)

at com.parse.OfflineStore$13.then(OfflineStore.java:762)

at com.parse.OfflineStore$13.then(OfflineStore.java:721)

at com.parse.Task$11.run(Task.java:481)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeAfterTask(Task.java:477)

at com.parse.Task.continueWithTask(Task.java:353)

at com.parse.Task.continueWithTask(Task.java:364)

at com.parse.Task$9.then(Task.java:410)

at com.parse.Task$9.then(Task.java:402)

at com.parse.Task$11.run(Task.java:481)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeAfterTask(Task.java:477)

at com.parse.Task.access$400(Task.java:22)

at com.parse.Task$7.then(Task.java:346)

at com.parse.Task$7.then(Task.java:343)

at com.parse.Task.runContinuations(Task.java:510)

at com.parse.Task.access$800(Task.java:22)

at com.parse.Task$TaskCompletionSource.trySetResult(Task.java:565)

at com.parse.Task$TaskCompletionSource.setResult(Task.java:599)

at com.parse.Task$11$1.then(Task.java:493)

at com.parse.Task$11$1.then(Task.java:485)

at com.parse.Task$10.run(Task.java:448)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeImmediately(Task.java:444)

at com.parse.Task.continueWith(Task.java:318)

at com.parse.Task.continueWith(Task.java:329)

at com.parse.Task$11.run(Task.java:485)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeAfterTask(Task.java:477)

at com.parse.Task.access$400(Task.java:22)

at com.parse.Task$7.then(Task.java:346)

at com.parse.Task$7.then(Task.java:343)

at com.parse.Task.runContinuations(Task.java:510)

at com.parse.Task.access$800(Task.java:22)

at com.parse.Task$TaskCompletionSource.trySetResult(Task.java:565)

at com.parse.Task$TaskCompletionSource.setResult(Task.java:599)

at com.parse.Task$11$1.then(Task.java:493)

at com.parse.Task$11$1.then(Task.java:485)

at com.parse.Task$10.run(Task.java:448)

at com.parse.Task$ImmediateExecutor.execute(Task.java:673)

at com.parse.Task.completeImmediately(Task.java:444)

at com.parse.Task.continueWith(Task.java:318)

at com.parse.Task.continueWith(Task.java:329)

at com.parse.Task$11.run(Task.java:485)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)

at java.lang.Thread.run(Thread.java:856)

Let me know if anyone has a solution for this issue. I have check this SO as well but no reply over there.

Upvotes: 2

Views: 612

Answers (3)

Vince
Vince

Reputation: 1664

I had the same issue. As it appears in your stacktrace, you encountered a java.util.ConcurrentModificationException when iterating over a LinkedList:

at java.util.LinkedList$LinkIterator.next(LinkedList.java:124)

One solution is to protect your code in a synchronized block or method.

Another solution, which I chose, is to use a collection specifically made for concurrent accesses. In my case I wanted an random accessed list (like ArrayList) so I used instead the java.util.concurrent.CopyOnWriteArrayList provided in Android package java.util.concurrent. I did not find any concurrent access collection for LinkedList but maybe the CopyOnWriteArrayList is enough for you. It is specifically made to read the list a lot and update it rarely.

Wwhile I cannot guarantee I found the exact right solution (it is a concurrent access issue, so this is hard to test), I do not have the bug any more, I consider my issue resolved.

Upvotes: 0

tetzlaff
tetzlaff

Reputation: 93

Try fully uninstalling the app from your phone and re-deploy it. I just had the same issue and uninstalling (include deleting cache and configs!) fixed it for me.

Upvotes: 2

sivag1
sivag1

Reputation: 5004

Did you make sure to register your custom Application class in the Android Manifest?

<application
        android:name=".MyApplication"
...>
.
.
.
</application>

Upvotes: 0

Related Questions