繁体   English   中英

Android 4.4 Intent.putExtra()和Intent.getExtra()无法正确投射

[英]Android 4.4 Intent.putExtra() and Intent.getExtra() cannot cast correctly

如果我在Android 6或5上运行此代码,则会得到零错误,并且可以正常运行。

    //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;
    }


    }

如果我运行相同的代码,则在运行任何版本的Android 4.0(已在4.4和4.2上测试)的手机上,都会收到java.lang.ClassCastException。 我想知道为什么会这样吗? 这个不成立。

我也已经在清单文件中声明了我的服务类。

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

这是我的堆栈跟踪:

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)

android处理传递可序列化的额外数组的方式已经从棒棒糖改变了。 在4.4 Kitkat上,是否要额外传递数组,这应该可以工作。

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

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

我在这里找到此方法: 链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM