Android 无法从一个活动检索到另一个活动的包实现类
我有一个名为Weekly Result的类,它实现了Parcel接口。将地块对象传递给其他活动时,检索该地块对象时遇到问题 这是我每周的课程: 这里是我发送目标的地方,目的是: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
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());
}