0

If I run this code on Android 6 or 5, I get zero errors and it runs as normal.

    //pass in a Date[] array 
    countdownServiceIntent.putExtra("timingsArray", timings);
    startService(countdownServiceIntent);//start the service

    //receive the array in another class (service class)
    protected void onHandleIntent(Intent intent)
    {
    try
    {   //get the Date[] array from the intent
        times = (Date[]) intent.getSerializableExtra("timingsArray");
    } 
    catch (Exception e)
    {
        e.printStackTrace();
        return;
    }


    }

If I run that same code, on a phone running any version of Android 4.0 (I tested on 4.4 and 4.2), I get a java.lang.ClassCastException. I want to know why that is? It makes no sense.

I have declared my service class inside my Manifest file as well.

<service android:name=".CountDownService" android:enabled="true"/> 

Here's my stack trace:

02-14 18:46:40.146: W/System.err(20047): java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.util.Date[]
02-14 18:46:40.146: W/System.err(20047):    at com.karimo.stopwatch.CountDownService.onHandleIntent(CountDownService.java:43)
02-14 18:46:40.146: W/System.err(20047):    at com.karimo.stopwatch.CountDownService.onStartCommand(CountDownService.java:69)
02-14 18:46:40.146: W/System.err(20047):    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2726)
02-14 18:46:40.146: W/System.err(20047):    at android.app.ActivityThread.access$2100(ActivityThread.java:144)
02-14 18:46:40.146: W/System.err(20047):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302)
02-14 18:46:40.146: W/System.err(20047):    at android.os.Handler.dispatchMessage(Handler.java:102)
02-14 18:46:40.146: W/System.err(20047):    at android.os.Looper.loop(Looper.java:136)
02-14 18:46:40.146: W/System.err(20047):    at android.app.ActivityThread.main(ActivityThread.java:5146)
02-14 18:46:40.146: W/System.err(20047):    at java.lang.reflect.Method.invokeNative(Native Method)
02-14 18:46:40.146: W/System.err(20047):    at java.lang.reflect.Method.invoke(Method.java:515)
02-14 18:46:40.146: W/System.err(20047):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
02-14 18:46:40.146: W/System.err(20047):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
02-14 18:46:40.146: W/System.err(20047):    at dalvik.system.NativeStart.main(Native Method)
Karim O.
  • 1,325
  • 6
  • 22
  • 36

1 Answers1

0

The way android handles passing serializable extra arrays has changed from lollipop. On 4.4 Kitkat, is you are passing array extra, this should work.

Object[] array = (Object[]) getIntent().getSerializableExtra("key");

User[] parsedArray = Arrays.copyOf(array, array.length, User[].class);

I found this method here: link

Community
  • 1
  • 1
crashOveride
  • 839
  • 6
  • 12