在安卓中不少時候咱們會用到線程 ,舉個例子若是說我從界面上獲取到值 而後將值傳遞到接口,而後根據接口返回的東西執行下面的邏輯代碼。因爲本人的代碼是用了不少的Tosat 提醒。因此就選擇了Handler 。有時候會出現這種問題,在執行代碼的時候由於是用線程去訪問接口的 ,因此那個線程會和主線程一塊兒運行。致使那個值是null 因此 第二次運行而後就會有值。因此請看解決方案。java
咱們能夠在外面聲明建立一個線程 異步
final Thread thread = new Thread(new Runnable(){ @SuppressWarnings("unchecked") @Override public void run() { try { Message message = new Message(); message.what = 1; map=(Map<String, Object>) search(default_code ); System.out.println(map); handler.sendMessage(message);//當返回值是null的時候就發送消息 System.out.println("發送了消息"); } catch (Throwable e) { e.printStackTrace(); } } });
這個代碼塊隨便放到哪裏都行。ide
而後咱們最好在聲明一個全局變量的handler,而後在咱們須要執行的地方用這個handler將咱們須要執行邏輯的代碼塊包裹住就行。在包裹住以前呢,咱們須要執行咱們的線程這樣樣子:線程
new Thread(thread).start();
這個樣子寫會少一個線程的異常。以前我在寫的時候發覺若是這樣去更新,通知handler的話 若是是作一個簡單的查詢,更新界面,可是若是第二次去查詢就會蹦掉出現一個線程的異常好像是不能啓動仍是什麼的。在網上找了不少以後發覺這個樣子寫能夠避免這個錯誤。code
最後咱們的代碼邏輯部分就是這樣子的:接口
new Thread(thread).start(); handler= new Handler(){ @Override public void handleMessage(Message msg){ super.handleMessage(msg); if(msg.what == 1){ System.out.println("更新後"); //這裏寫你須要執行的代碼塊便可 }}};
這樣就能夠實現這個需求,固然若是數據量很小的話也能夠用AsynTask.這個類異步請求。class
若是有疑問能夠發個人郵件:haiabi@163.comthread