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();  
        ...  
      }  
    }  

    谢谢大家!

  • 相关阅读:
    SCP 命令
    Android 系统默认参数的修改
    java类加载时机与过程
    Git学习总结四(删除)
    Git学习总结三(工作区和暂存区、撤销修改)
    Git学习总结二(版本回退)(git resrt / git revert / git checkout)
    Git学习总结一(下载、初始化、添加文件)
    Mybatis逆向工程使用方法
    Mybatis与Spring整合方法
    Mybatis学习总结四(关联查询)
  • 原文地址:https://www.cnblogs.com/fengju/p/6174491.html
Copyright © 2011-2022 走看看