使用Handler下載數據

思路:
1.在子線程中處理耗時操作,再通過Handler對象發送消息。
2 通過Handler的handleMessage方法接收其他線程發送過來的數據

代碼展示:

public class Fragment_A extends Fragment {
    private Handler handler ;
    private String urlString = "http://www.51kan.com.cn/lolservice/newlolitemsbytype.jsp?type=defense&start=0";
    private List<LOL> lolList;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.fragment_a_layout,container,false);     
        lolList = new ArrayList<>();

        initHandler();//2處理其他線程發送過來的數據
        startHandler(urlString,0);//1處理耗時操作,獲取數據

        return view;
    }



    //1.在子線程中處理耗時操作,再通過Handler對象發送消息。
    private void startHandler(final String urlString, final int what) {
       new Thread(new Runnable() {
           @Override
           public void run() {
               //下載,解析
              String jsonString =  HttpUtil.download(urlString);
               List<LOL> lolList = Jsonparser.paese(jsonString);
               Message msg = Message.obtain();
               msg.what=what;
               msg.obj=lolList;
               //使用handler發動消息,handler對象既是消息的發送者,也是消息的處理者。
               handler.sendMessage(msg);

           }
       }).start();

    }
//2 通過Handler的handleMessage方法接收其他線程發送過來的數據
    private void initHandler() {
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if(msg.what==0){

                  List<LOL> tiemList = (List<LOL>) msg.obj;
                  lolList.addAll(tiemList);

                }

            }
        };
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章