小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

Android初级开发第十讲--对象传递


                          博客出自: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();  
    ...  
  }  
}  

谢谢大家!

posted on 2012-09-20 16:24  王峰炬  阅读(106)  评论(0编辑  收藏  举报

导航