1. ArrayList和數組之間的一些轉換
ArrayLlist底層就是用數組實現的,並且提供了兩個方法給我們來將集合轉換成數組
1. public Object[] toArray() 這個數組中儲存的是object對象
2. public T[] toArray(T[] a) 這個數組中儲存的是指定的T類型的對象
說說使用這兩個方法可能會出現的問題
使用第一個方法經常會出現類型轉換的問題
代碼:
ArrayList list = new ArrayList();
String[] whereArgs = (String[]) list.toArray();
就會拋出類轉換異常。這樣轉換時不對的,這裡涉及到了泛型的強轉問題,晚上看看再補充。
第二個方法:
代碼:
ArrayList list = new ArrayList();
String[] whereArgs = new String[list.size()];
whereArgs = list.toArray(whereArgs);
這樣寫是ok的,但是如果建立數組對象時,沒有指定數組的大小,就會報錯
這個方法中的參數a相當於c語言中的傳入性參數,將一個空數組傳給集合,集合將其填滿,再返回。
2. 使用Handler進行子線程與主線程之間的通訊
從一個錯誤開始:
public class HomeActivity extends Activity {
private static final String tag = "HomeActivity";
private Button mStart_btn;
private Thread mSubThread;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mStart_btn = (Button) this.findViewById(R.id.btn);
Log.i(tag, "mainThread: "+Thread.currentThread().getId());
mStart_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSubThread = new Thread(new Runnable() {
@Override
public void run() {
Log.i(tag, "subThread: "+Thread.currentThread().getId());
Looper mainLooper = Looper.getMainLooper();
Handler subHandler = new Handler(mainLooper);
Message mes = subHandler.obtainMessage(1,1,1);
subHandler.sendMessage(mes);//向主線程發送資料
}
});
mSubThread.start();
}
});
}
private Handler mhandler = new Handler(){
@Override
public void handleMessage(Message msg) {
Log.i(tag, "handler01 is working");
mSubThread.stop();
}
};
結果:並沒有列印出“handler01 is working”,為什嗎?
在子線程中建立Handler對象,並且綁定主線程的Looper,按理說應該可以進行子線程與主線程之間的通訊了,但是為什麼會出現上述情況呢,這要從Handler的源碼說起
public final boolean sendMessage(Message msg)
{
return sendMessageDelayed(msg, 0);
}
public final boolean sendMessageDelayed(Message msg, long delayMillis)
{
if (delayMillis Clean... > Clean project selected below > Ok
4. 內部類的使用
4.1 什麼情況下使用內部類?
當你在類A中需要用到類B的對象,並且在類B中的方法裡還要訪問類A的成員變數和方法,這個時候,你就需要將類B寫成類A的內部類了。
4.2 外部如何引用內部類
1. 用關鍵字static修飾內部類,那麼這個內部類就相當於外部類,但是這種用法很少見,有很大的局限性,例如內部類不能訪問外部類中非static的成員
2. 通過建立對象從外部參考,先要建立外部類對象,然後通過外部類對象去new內部類的執行個體,實際上就是將內部類看成外部類的一個成員屬性而已。