Hi i am learning android programming.In this code i am trying to send person object from one activity to other.when i run this program on my device it does not run and unfortunately app has stopped error is displayed please give some solution for this problem.
1.Main activity
public class MainActivity extends Activity {
EditText editname;
EditText editage;
EditText editdob;
Person p1;
Button sw;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editname=(EditText) findViewById(R.id.textname);
editage=(EditText) findViewById(R.id.editage);
editdob=(EditText) findViewById(R.id.editdob);
sw=(Button) findViewById(R.id.sw);
intent=new Intent(this,Second.class);
sw.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
p1.setAge(editage.getText().toString());
p1.setName(editname.getText().toString());
p1.setDob(editdob.getText().toString());
}
});
intent.putExtra("data", p1);
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
2.Person object
public class Person implements Parcelable {
String name;
String age;
String dob;
Person(Parcel in)
{
readfromparcel(in);
}
private void readfromparcel(Parcel in) {
name =in.readString();
age=in.readString();
dob=in.readString();
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
Parcelable.Creator CREATOR =new Parcelable.Creator() {
@Override
public Object createFromParcel(Parcel source) {
return new Person(source);
}
@Override
public Object[] newArray(int size) {
// TODO Auto-generated method stub
return new Person[size];
}
};
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(age);
dest.writeString(name);
dest.writeString(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getDob() {
return dob;
}
public void setDob(String dob) {
this.dob = dob;
}
}
3.second activity
public class Second extends Activity {
Intent intent;
TextView textname,textage,textdob;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textname=(TextView) findViewById(R.id.textname);
textdob=(TextView) findViewById(R.id.textdob);
textage=(TextView) findViewById(R.id.textage);
intent=getIntent();
Person p1=intent.getExtras().getParcelable("data");
textname.setText(p1.getName());
textage.setText(p1.getAge());
textdob.setText(p1.getDob());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.second, menu);
return true;
}
}
4.logcat output(it keeps on running)
04-06 16:13:59.272: D/dalvikvm(29765): threadid=4: interp stack at 0x4f34f000
04-06 16:13:59.272: D/jdwp(29765): JDWP: thread running
04-06 16:13:59.273: D/jdwp(29765): acceptConnection
04-06 16:13:59.273: D/jdwp(29765): trying to receive file descriptor from ADB
04-06 16:13:59.273: D/dalvikvm(29765): threadid=5: interp stack at 0x51489000
04-06 16:13:59.273: D/dalvikvm(29765): zygote get thread init done
04-06 16:13:59.273: D/dalvikvm(29765): create interp thread : stack size=32KB
04-06 16:13:59.273: D/dalvikvm(29765): create new thread
04-06 16:13:59.273: D/dalvikvm(29765): new thread created
04-06 16:13:59.273: D/dalvikvm(29765): update thread list
04-06 16:13:59.274: D/dalvikvm(29765): threadid=6: interp stack at 0x51491000
04-06 16:13:59.274: D/dalvikvm(29765): threadid=6: created from interp
04-06 16:13:59.274: D/dalvikvm(29765): start new thread
04-06 16:13:59.274: D/dalvikvm(29765): create interp thread : stack size=32KB
04-06 16:13:59.274: D/dalvikvm(29765): create new thread
04-06 16:13:59.274: D/dalvikvm(29765): new thread created
04-06 16:13:59.274: D/dalvikvm(29765): update thread list
04-06 16:13:59.274: D/dalvikvm(29765): threadid=6: notify debugger
04-06 16:13:59.274: D/dalvikvm(29765): threadid=6 (ReferenceQueueDaemon): calling run()
04-06 16:13:59.274: D/dalvikvm(29765): threadid=7: interp stack at 0x51599000
04-06 16:13:59.274: D/dalvikvm(29765): threadid=7: created from interp
04-06 16:13:59.274: D/dalvikvm(29765): start new thread
04-06 16:13:59.274: D/dalvikvm(29765): create interp thread : stack size=32KB
04-06 16:13:59.274: D/dalvikvm(29765): create new thread
04-06 16:13:59.274: D/dalvikvm(29765): new thread created
04-06 16:13:59.274: D/dalvikvm(29765): update thread list
04-06 16:13:59.275: D/dalvikvm(29765): threadid=7: notify debugger
04-06 16:13:59.276: D/dalvikvm(29765): threadid=7 (FinalizerDaemon): calling run()
04-06 16:13:59.276: D/dalvikvm(29765): threadid=8: interp stack at 0x516a1000
04-06 16:13:59.276: D/dalvikvm(29765): threadid=8: created from interp
04-06 16:13:59.276: D/dalvikvm(29765): start new thread
04-06 16:13:59.277: D/Zygote(29765): fork pid : 0
04-06 16:13:59.281: D/dalvikvm(29765): threadid=8: notify debugger
04-06 16:13:59.281: D/dalvikvm(29765): threadid=8 (FinalizerWatchdogDaemon): calling run()
04-06 16:13:59.290: D/dalvikvm(29765): threadid=9: interp stack at 0x51aa7000
04-06 16:13:59.299: D/dalvikvm(29765): threadid=10: interp stack at 0x51baf000
04-06 16:13:59.302: D/jdwp(29765): received file descriptor 39 from ADB
04-06 16:13:59.302: D/jdwp(29765): processIncoming
04-06 16:13:59.306: E/Trace(29765): error opening trace file: No such file or directory (2)
04-06 16:13:59.307: D/jdwp(29765): sendBufferedRequest : len=0x3D
04-06 16:13:59.307: D/jdwp(29765): processIncoming
04-06 16:13:59.308: D/jdwp(29765): handlePacket : cmd=0x1, cmdSet=0xC7, len=0x13, id=0x4000005C, flags=0x0, dataLen=0x8
04-06 16:13:59.315: D/jdwp(29765): processIncoming
04-06 16:13:59.315: D/jdwp(29765): handlePacket : cmd=0x1, cmdSet=0xC7, len=0x17, id=0x4000005D, flags=0x0, dataLen=0xC
04-06 16:13:59.316: D/jdwp(29765): processIncoming
04-06 16:13:59.316: D/jdwp(29765): handlePacket : cmd=0x1, cmdSet=0xC7, len=0x13, id=0x4000005E, flags=0x0, dataLen=0x8
04-06 16:13:59.316: D/jdwp(29765): processIncoming
04-06 16:13:59.316: D/jdwp(29765): handlePacket : cmd=0x1, cmdSet=0xC7, len=0x13, id=0x4000005F, flags=0x0, dataLen=0x8
04-06 16:13:59.319: D/dalvikvm(29765): open_cached_dex_file : /data/app/com.example.sendobj-2.apk /data/dalvik-cache/data@app@com.example.sendobj-2.apk@classes.dex
04-06 16:13:59.334: D/skia(29765): Flag is not 10
04-06 16:13:59.345: D/skia(29765): Flag is not 10
04-06 16:13:59.500: D/AndroidRuntime(29765): Shutting down VM
04-06 16:13:59.500: W/dalvikvm(29765): threadid=1: thread exiting with uncaught exception (group=0x4191d908)
04-06 16:13:59.502: E/AndroidRuntime(29765): FATAL EXCEPTION: main
04-06 16:13:59.502: E/AndroidRuntime(29765): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sendobj/com.example.sendobj.Second}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.example.sendobj.Person
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2189)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2216)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.app.ActivityThread.access$600(ActivityThread.java:149)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.os.Handler.dispatchMessage(Handler.java:99)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.os.Looper.loop(Looper.java:153)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.app.ActivityThread.main(ActivityThread.java:5000)
04-06 16:13:59.502: E/AndroidRuntime(29765): at java.lang.reflect.Method.invokeNative(Native Method)
04-06 16:13:59.502: E/AndroidRuntime(29765): at java.lang.reflect.Method.invoke(Method.java:511)
04-06 16:13:59.502: E/AndroidRuntime(29765): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
04-06 16:13:59.502: E/AndroidRuntime(29765): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
04-06 16:13:59.502: E/AndroidRuntime(29765): at dalvik.system.NativeStart.main(Native Method)
04-06 16:13:59.502: E/AndroidRuntime(29765): Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.example.sendobj.Person
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.os.Parcel.readParcelable(Parcel.java:2086)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.os.Parcel.readValue(Parcel.java:1965)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.os.Parcel.readMapInternal(Parcel.java:2226)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.os.Bundle.unparcel(Bundle.java:223)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.os.Bundle.getParcelable(Bundle.java:1165)
04-06 16:13:59.502: E/AndroidRuntime(29765): at com.example.sendobj.Second.onCreate(Second.java:20)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.app.Activity.performCreate(Activity.java:5020)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-06 16:13:59.502: E/AndroidRuntime(29765): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
04-06 16:13:59.502: E/AndroidRuntime(29765): ... 11 more
Try upadting this part of your code. If didnt work then provide your logcat output.
sw.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
p1.setAge(editage.getText().toString());
p1.setName(editname.getText().toString());
p1.setDob(editdob.getText().toString());
intent=new Intent(MainActivity.this,Second.class);
intent.putExtra("data", p1);
startActivity(intent);
}
});
Also as Hariharn's ans you have not initialized p1.
Try this..
You have not initilize your P1 in your MainActivity
try to initilize it. That time you will get NPE
Person p1;
Button sw;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
p1 = new Person();
Your CREATOR in Person
class must be public static final
. Try like this:
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
...
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.