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,
太坑爹了。