Android 无法从一个活动检索到另一个活动的包实现类

Android 无法从一个活动检索到另一个活动的包实现类,android,android-intent,parcel,android-4.2-jelly-bean,Android,Android Intent,Parcel,Android 4.2 Jelly Bean,我有一个名为Weekly Result的类,它实现了Parcel接口。将地块对象传递给其他活动时,检索该地块对象时遇到问题 这是我每周的课程: 这里是我发送目标的地方,目的是: public void GoToWeeklyTopic(View v) { Intent intent = new Intent(); intent.setClass(HomeActivity.this, Topic_of_the_week.class); Bundle b = new Bund

我有一个名为Weekly Result的类,它实现了Parcel接口。将地块对象传递给其他活动时,检索该地块对象时遇到问题

这是我每周的课程:

这里是我发送目标的地方,目的是:

public void GoToWeeklyTopic(View v) {
    Intent intent = new Intent();
    intent.setClass(HomeActivity.this, Topic_of_the_week.class);

    Bundle b = new Bundle();
    WeeklyTopicResult w = weeks;

    // Puts the weeklyresult parcel class into bundle
    b.putParcelable("WeeklyContent", w);

    intent.putExtras(b);
    startActivity(intent);
}
下面是我尝试接收包裹对象的活动类:

ImageView weekImg;
TextView title;
TextView ContentText;
WeeklyTopicResult week= new WeeklyTopicResult();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_topic_of_the_week);

    Bundle extras = getIntent().getExtras();
            //Here I am receiving an error
    week =extras.getParcelable("WeeklyContent");


    weekImg = (ImageView) findViewById(R.id.imageView1);
    title = (TextView) findViewById(R.id.txt_MainTitle);
    ContentText = (TextView) findViewById(R.id.txt_page_content_topicweek);

    title.setText(week.Title.EnglishValue);
    ContentText.setText(week.Text.EnglishValue);
    weekImg.setImageBitmap(week.ImageSource);
    // String FullPath = RetrieveData_Preference("WeeklyTopicUrl") + Url;
    // getImage(FullPath);

}
我甚至试着把这个物体扔回去,但仍然有一个错误。Logcat错误向我显示了这个错误,但我已经为weeklyresult实现了一个creater类

LogCat错误:

致命异常:主 java.lang.RuntimeException:无法启动活动

ComponentInfo{com.example.laysapp/com.example.laysapp.AdminPage.Topic\u of the_week}: android.os.BadParcelableException:Parcelable协议要求在com.example.laysapp.ParsingLogic.WeeklyTopicResult类上使用名为Creator的Parcelable.Creator对象 E/AndroidRuntime1231: 在android.app.ActivityThread.PerformLaunchActivityActivityRead.java:2180 在android.app.ActivityThread.handleLaunchActivityYaActivityThread.java:2230 在android.app.ActivityThread.access$600ActivityThread.java:141 在android.app.ActivityThread$H.handleMessageActivityThread.java:1234 在android.os.Handler.dispatchMessageHandler.java:99 在android.os.Looper.Looper.java:137 在android.app.ActivityThread.mainActivityThread.java:5039 在java.lang.reflect.Method.invokenactive方法中 位于java.lang.reflect.Method.invokeMethod.java:511 位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:793 位于com.android.internal.os.ZygoteInit.mainZygoteInit.java:560 在dalvik.system.NativeStart.mainNative方法 原因:android.os.BadParcelableException:Parcelable协议需要 类上名为Creator的Parcelable.Creator对象 com.example.laysapp.ParsingLogic.WeeklyTopicResult 位于android.os.Parcel.readParcelableParcel.java:2086 在android.os.Parcel.readValueParcel.java:1965 在android.os.Parcel.readMapInternalParcel.java:2226 在android.os.Bundle.unparcelBundle.java:223 位于android.os.Bundle.getParcelableBundle.java:1165 在com.example.laysapp.AdminPage.Topic上创建 本周的主题:java:40 在android.app.Activity.performCreateActivity.java:5104 在android.app.Instrumentation.callActivityOnCreateInstrumentation.java:1080 在android.app.ActivityThread.performLaunchActivityActivityThread.java:2144 ... 还有11个


我在这里做错了什么?

来自文档:

实现Parcelable接口的类还必须具有名为CREATOR的静态字段,该字段是实现Parcelable.CREATOR接口的对象

因此,将此字段添加到您的多语言类:


你必须始终按照你写的顺序阅读:

@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    Log.v("WeekData", "WriteToParcel..." + flags);
    dest.writeString(ID);
    dest.writeString(ImageUrl);
    dest.writeString(PublishOn);
    dest.writeParcelable(Title, flags);
    dest.writeParcelable(Text, flags);
    dest.writeParcelable(ImageSource, flags);

}

public void ReadFromParcel(Parcel obj) {
    Log.v("WeeklyClaas",
            "ParcelData(Parcel source): time to put back parcel data");
    ID = obj.readString();
    //these were lower
    ImageUrl = obj.readString();
    PublishOn = obj.readString();
    Title = (MultiLingual) obj.readParcelable(MultiLingual.class
            .getClassLoader());
    Text = (MultiLingual) obj.readParcelable(MultiLingual.class
            .getClassLoader());
    ImageSource = (Bitmap) obj
            .readParcelable(Bitmap.class.getClassLoader());
}

... 通过查看堆栈跟踪可以很容易地找到:android.os.BadParcelableException:parcelableprotocol需要一个名为Creator的Parcelable.Creator对象……这同样适用于WeeklyTopicResult类。它还必须有一个初始化为new WeeklyTopicResultParcelCreateRhy的静态创建者字段。你能给我一些示例吗?因为我在两个类中都创建了一个静态变量。它一直给我错误。我按照你的建议重新排列了代码。我仍然无法检索包裹对象。
ImageView weekImg;
TextView title;
TextView ContentText;
WeeklyTopicResult week= new WeeklyTopicResult();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_topic_of_the_week);

    Bundle extras = getIntent().getExtras();
            //Here I am receiving an error
    week =extras.getParcelable("WeeklyContent");


    weekImg = (ImageView) findViewById(R.id.imageView1);
    title = (TextView) findViewById(R.id.txt_MainTitle);
    ContentText = (TextView) findViewById(R.id.txt_page_content_topicweek);

    title.setText(week.Title.EnglishValue);
    ContentText.setText(week.Text.EnglishValue);
    weekImg.setImageBitmap(week.ImageSource);
    // String FullPath = RetrieveData_Preference("WeeklyTopicUrl") + Url;
    // getImage(FullPath);

}
public static final MyMultiLingualParcelCreator CREATOR = new MyMultiLingualParcelCreator();
@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    Log.v("WeekData", "WriteToParcel..." + flags);
    dest.writeString(ID);
    dest.writeString(ImageUrl);
    dest.writeString(PublishOn);
    dest.writeParcelable(Title, flags);
    dest.writeParcelable(Text, flags);
    dest.writeParcelable(ImageSource, flags);

}

public void ReadFromParcel(Parcel obj) {
    Log.v("WeeklyClaas",
            "ParcelData(Parcel source): time to put back parcel data");
    ID = obj.readString();
    //these were lower
    ImageUrl = obj.readString();
    PublishOn = obj.readString();
    Title = (MultiLingual) obj.readParcelable(MultiLingual.class
            .getClassLoader());
    Text = (MultiLingual) obj.readParcelable(MultiLingual.class
            .getClassLoader());
    ImageSource = (Bitmap) obj
            .readParcelable(Bitmap.class.getClassLoader());
}