不幸的是app已经停止了

时间:2014-04-06 09:48:48

标签: java android android-intent android-listview

嗨我正在学习android编程。在这段代码中我试图将人物对象从一个活动发送到另一个。当我在我的设备上运行这个程序时它不运行而且不幸的是app已停止错误显示请给出一些解决方案对于这个问题。

1.主要活动

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对象

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.第二次活动

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输出(它继续运行)

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

3 个答案:

答案 0 :(得分:1)

尝试更新代码的这一部分。如果没有工作,那么提供你的logcat输出。

 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);

                }
            });

同样是Hariharan,你还没有初始化p1。

答案 1 :(得分:0)

试试这个..

您尚未在MainActivity尝试初始化 P1 。那个时候你会得到 NPE

Person p1;
Button sw;
Intent intent;

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

    p1 = new Person();

答案 2 :(得分:0)

Person课程中的CREATOR必须为public static final。试试这样:

public static final Parcelable.Creator<MyParcelable> CREATOR
         = new Parcelable.Creator<MyParcelable>() {
    ...
}
相关问题