思路:
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);
}
}
};
}
}