zoukankan      html  css  js  c++  java
  • 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();  
        ...  
      }  
    }  

    谢谢大家!

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/fengju/p/6174491.html
Copyright © 2011-2022 走看看