android - ClassNotFoundException异常

标签 android

07-14 11:58:28.160: WARN/Intent(1911): Failure filling in extras
07-14 11:58:28.160: WARN/Intent(1911): java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object (name = ams.gelato.api.TaskScheduler$Task)
07-14 11:58:28.160: WARN/Intent(1911):     at android.os.Parcel.readSerializable(Parcel.java:1890)
07-14 11:58:28.160: WARN/Intent(1911):     at android.os.Parcel.readValue(Parcel.java:1761)
07-14 11:58:28.160: WARN/Intent(1911):     at android.os.Parcel.readMapInternal(Parcel.java:1947)
07-14 11:58:28.160: WARN/Intent(1911):     at android.os.Bundle.unparcel(Bundle.java:169)
07-14 11:58:28.160: WARN/Intent(1911):     at android.os.Bundle.putAll(Bundle.java:242)
07-14 11:58:28.160: WARN/Intent(1911):     at android.content.Intent.fillIn(Intent.java:4853)
07-14 11:58:28.160: WARN/Intent(1911):     at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:194)
07-14 11:58:28.160: WARN/Intent(1911):     at com.android.server.am.PendingIntentRecord.send(PendingIntentRecord.java:176)
07-14 11:58:28.160: WARN/Intent(1911):     at android.app.PendingIntent.send(PendingIntent.java:400)
07-14 11:58:28.160: WARN/Intent(1911):     at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:645)
07-14 11:58:28.160: WARN/Intent(1911): Caused by: java.lang.ClassNotFoundException: ams.gelato.api.TaskScheduler$Task
07-14 11:58:28.160: WARN/Intent(1911):     at java.lang.Class.classForName(Native Method)
07-14 11:58:28.160: WARN/Intent(1911):     at java.lang.Class.forName(Class.java:237)
07-14 11:58:28.160: WARN/Intent(1911):     at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2604)
07-14 11:58:28.160: WARN/Intent(1911):     at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1860)
07-14 11:58:28.160: WARN/Intent(1911):     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:840)
07-14 11:58:28.160: WARN/Intent(1911):     at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2080)
07-14 11:58:28.160: WARN/Intent(1911):     at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:943)
07-14 11:58:28.160: WARN/Intent(1911):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2299)
07-14 11:58:28.160: WARN/Intent(1911):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2254)
07-14 11:58:28.160: WARN/Intent(1911):     at android.os.Parcel.readSerializable(Parcel.java:1884)
07-14 11:58:28.160: WARN/Intent(1911):     ... 9 more
07-14 11:58:28.160: WARN/Intent(1911): Caused by: java.lang.NoClassDefFoundError: ams.gelato.api.TaskScheduler$Task
07-14 11:58:28.160: WARN/Intent(1911):     ... 19 more
07-14 11:58:28.160: WARN/Intent(1911): Caused by: java.lang.ClassNotFoundException: ams.gelato.api.TaskScheduler$Task in loader dalvik.system.PathClassLoader@4001b4f8
07-14 11:58:28.160: WARN/Intent(1911):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
07-14 11:58:28.160: WARN/Intent(1911):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
07-14 11:58:28.160: WARN/Intent(1911):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
07-14 11:58:28.160: WARN/Intent(1911):     ... 19 more

当尝试将我的可序列化对象传递给 Intent 时出现此异常

package ams.gelato.api;

imports...
...


public class TaskScheduler implements ITaskScheduler{

    List<Task> tasks = new ArrayList<Task>();
    Context context = null;
    Intent intent= null;
    AlarmManager am = null;

    public TaskScheduler(Context c){
        context = c;
        intent = new Intent(context,TaskReceiver.class);
        am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    }

    @Override
    public boolean RunTaskAtTime(ITask _task, Date time) {
            Intent newIntent = new Intent(intent);
            newIntent.putExtra("task", new Task(_task));
            am.set(AlarmManager.RTC_WAKEUP, time.getTime(), PendingIntent.getBroadcast(context, 0, newIntent, PendingIntent.FLAG_UPDATE_CURRENT));
            return true;

    }

public static class Task implements ITask,Serializable{


    ITask task;

    public Task(ITask t){  
          task = t;
    }



    @Override
    public void runTask(){

    }
}

这是我的任务调度程序的源代码。有问题的链接是; newIntent.putExtra("task", new Task(_task));我不确定为什么会抛出这些异常,有人可以帮我吗?

最佳答案

如果你想传递一个 Task 对象,你必须做类似的事情

公共(public)类 Task 实现 Parcelable{ 这里...实现方法

看这个例子

http://blog.cluepusher.dk/2009/10/28/writing-parcelable-classes-for-android/

关于android - ClassNotFoundException异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6696449/

相关文章:

android - 在Android中,有没有办法获得电池电流?

java - RecyclerView 向上/向下滚动监听器

java - 电子邮件 Intent 问题。无法选择电子邮件选项

android - 在android中切换通知栏

android - 对话框中的按钮设置事件时android崩溃

android - 在android上执行pm时出现段错误

java - gradle 依赖如何找到包?

android - ExpandableListView 中的 smoothScrollToPosition

java - 如何将字符串转换为 UTC/GMT 时区的日期

android - Jetpack Compose X.dp 性能问题?