Android intent 传递复杂结构的ArrayList

YY的,从昨天晚上就搞到现在才解决这个问题,哈哈

我希望在activity和service之间传递一个很复杂的arraylist(工作代码不好贴出来,就举个例子吧)

List<School> scList = new ArrayList();

我在activity:

public class MainActivity extends Activity {


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

	@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;
	}

    class School implements Serializable{
	    String name;
	    List<Ban> banList = new ArrayList();
    }
    
    class Ban implements Serializable{
	    List<String>  nameList = new ArrayList() ;
	    List<String> dspList = new ArrayList();
    }
	
	public void startHello(){
		Log.i("hello","startHello");
		Intent it = new Intent(this,HelloService.class);
		Ban ban = new Ban();
		School sc = new School();
		
		List<School> scList = new ArrayList();
		List<Year> yList = new ArrayList();
		List<Ban> banList = new ArrayList();
		
		ban.nameList.add("xiaohua");
		ban.nameList.add("xiaocao");
		ban.dspList.add("xioahua shi ben dan");
		ban.dspList.add("xiaocao shi zhu");
		
		banList.add(ban);
		sc.banList = banList;
		sc.name = "yulong";
		scList.add(sc);
		
		Log.i("hello","stList size = " + scList.size());
		
		Bundle bundle = new Bundle();
		bundle.putSerializable("test", (Serializable)scList);
		it.putExtras(bundle);
		
		ArrayList<School> pscLList = (ArrayList<School>)it.getSerializableExtra("test");
		Log.i("hello","pscLList size = " + pscLList.size());
		
		startService(it);
		
		Log.i("hello","startHello end");
	}

}

 接着在service中:

import java.util.ArrayList;


import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class HelloService extends Service{
	

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		intent.getStringExtra("sherry");
		return null;
	}
	
	  @Override
	    public void onCreate() {
		  Log.i("hello","come in service onCreate");
	    }
	  
	  @Override
	  public void onStart(Intent intent, int startId) {
		  Log.i("hello","come in service onStart");
		  
		  ArrayList<School> scList = (ArrayList<School>)intent.getSerializableExtra("test");
		  Log.i("hello","come in service onStart size = " +scList.size());
			for(int i=0;i<scList.size();i++){
				School sc = scList.get(i);
				Log.i("hello","name:" + sc.name);
			}
			Log.i("hello","come in service onStart end");
			
	  }

}

 结果报错:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testhello/com.example.testhello.MainActivity}: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.testhello.MainActivity$School)

后面突然想要不把里面定义的几个类拿出来,哈哈,果真就对了,把School,和Ban独立出来后,Ok,

太坑爹了。

 

原文地址:https://www.cnblogs.com/mickeyontheway/p/3553141.html