,做一個小簽到程式,在第一個Activity中填入簽到資訊。然後在第二個Activity中顯示出來。
可以看到,這個程式涉及到TextView、EditText、Spinner、RadioGroup、RadioButton、Button、ListView組件,可以練習一下View 的使用方法。我的思路是建立一個個人資訊類PersonInfo,在點擊簽到按鈕後產生一個PersonInfo對象,並將對象傳入第二個Activity中,在第二個Avctivity中用一個PersonInfo來儲存接受到的對象,再顯示出來。
問題一:Activity中Intent傳遞對象的方法,為此參考了此文中談到的兩種方法:1、實現了Serializable介面;2、實現了Parcelable介面。
過程還是蠻順利,成功的接收到了PersonInfo對象。然後工作就是在ListActivity中展示出來,My Code是這麼寫的
package com.zxl.signin;import java.util.ArrayList;import java.util.HashMap;import android.app.ListActivity;import android.os.Bundle;import android.widget.SimpleAdapter;public class InfoListActivity extends ListActivity { private Bundle bundle; private PersonInfo[] personInfos; private SimpleAdapter lisAdapter; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //獲得從上一個activity中傳入的person對象 personInfos = new PersonInfo[10]; getPerson(); setAdaptet(); } private void getPerson() { bundle = getIntent().getExtras(); PersonInfo person = (PersonInfo) bundle.getSerializable("info"); int i = person.getId(); personInfos[i] = person; System.out.println(i); } private void setAdaptet() { ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>(); for (int i = 1; i <= PersonInfo.no; i++) { HashMap<String, String> map = new HashMap<String, String>(); map.put("name", personInfos[i].getName()); map.put("school", personInfos[i].getSchool()); map.put("sex", personInfos[i].getSex()); map.put("tel", personInfos[i].getTelNo()); list.add(map); } lisAdapter = new SimpleAdapter(this, list, R.layout.listitem, new String[] {"name", "school", "sex", "tel"}, new int[] {R.id.name, R.id.school, R.id.sex, R.id.tel}); setListAdapter(lisAdapter); }}
看似並無問題,沒註冊一個Person就往數組personInfos裡放,然後在setAdapter中用一個迴圈從數組中取出並顯示在ListActivity中。
顯示挺正常的,但是當我按下返回鍵退出到Activity中後,再次註冊的話會報null 指標異常。DeBug了好久,終於發現疏忽了。原來ListAcitivity在按返回鍵後其中的數組personInfos並沒有儲存,再次點擊註冊後會重新new一個personInfos,這就導致for迴圈時會報錯,因為personInfos[1]=null。
頭疼了,那臨時儲存這個personInfos該怎麼存?還沒有想到解決辦法。