博客出自:http://blog.csdn.net/liuxian13183,转载注明出处!
All Rights Reserved !
大家在listview传递对象或者activity之间对象的传递,如果处理不当,会出现Exception
我们可以用如下方法解决
方法一:
如果单纯的传递List<String> 或者List<Integer>的话 就可以直接使用
intent.putStringArrayListExtra(name, value)
intent.putIntegerArrayListExtra(name, value)
方法二:
如果传递的是List<Object>,可以把list强转成Serializable类型,同时传递Object也要实现Serializable接口 求,然后通过 putExtras(key, (Serializable)list)
方法传递过去,接收的时候用 (List<Object>) getIntent().getSerializable(key) 收到List<YourObject>数据了
方法三:
一种是实现Serializable接口,很简单
Bundle.putSerializable(Key,Object);
另一种是 实现Parcelable接口
Bundle.putParcelable(Key, Object);
代码如下:
public class Bean implements Parcelable { private int id; private String username; private String password; public static final Parcelable.Creator<Bean> CREATOR = new Creator<Bean>() { @Override public Bean createFromParcel(Parcel source) { Bean bean = new Bean(); bean.id = source.readInt(); bean.username = source.readString(); bean.password = source.readString(); return bean; } @Override public Bean[] newArray(int size) { return new Bean[size]; } }; @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // TODO Auto-generated method stub dest.writeInt(id); dest.writeString(username); dest.writeString(password); } }
序列化:
public class Student implements Serializable{ /** * */ private static final long serialVersionUID = 1L; public int age; public String name; }发送:
Student stu = new Student(); stu.name = tmall_name.getText().toString(); stu.age = Integer.valueOf(tmall_age.getText().toString()); Intent intent = new Intent(); intent.setClass(getApplicationContext(), StudentInfo.class); intent.putExtra("student", stu); startActivity(intent);接收:
Intent intent = this.getIntent(); Student stu = (Student) intent.getSerializableExtra("student"); student_name.setText(stu.name); student_age.setText(stu.age+"");
方法五:
用intent传来传去 觉得不方便 我们可以写一个在application里面的全局数据1、创建一个属于你自己的android.app.Application的子类
2、在manifest中申明一下这个类,
3、这时android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。
继承Application
class MyApp extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
关于AndroidManifest.xml中的配置,原来直接给application加个name就可以了,如下面所示:
<application android:name=".MyApp"
android:icon="@drawable/icon" android:label="@string/app_name">
使用class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
谢谢大家!