简体   繁体   中英

unfortunately app has stopped

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.

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