天天看點

異步同步請求資料并展示

異步和同步請求的代碼

(1)異步:

class MyAAsynask extends AsyncTask<String,Void,String> {

@Override
protected String doInBackground(String... strings) {
    //判斷網絡、寫權限
    boolean iswork = HTTPUtil.iswork(getActivity());
    if (iswork){
        //直接通路資料
        return HTTPUtil.request(strings[0]);
    }else{
        //傳回
        return "";
    }

}
//重寫一個方法
@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    if(s.equals("")){
        Toast.makeText(getActivity(),"沒網 ",Toast.LENGTH_LONG).show();
    }else{
        //解析
        Gson  gson=new Gson();
        Userss userss = gson.fromJson(s, Userss.class);
        Users result = userss.getResult();
        songlist = result.getSonglist();
        //建立擴充卡展示
        listView.setAdapter(new MyAdapter(getActivity(),songlist));
    }
}
           

}

//開啟異步

@Override

public void onActivityCreated(@Nullable Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

MyAAsynask myAAsynask = new MyAAsynask();

myAAsynask.execute(str);

}

(2) 同步 :

@Override

public void onActivityCreated(@Nullable Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

new Thread(){

@Override

public void run() {

String strs="";

super.run();

//在子線程中判斷網絡 子線程中不能更新Ui

boolean strss=HTTPUtil.iswork(getActivity());

//有網、請求資料

if (strss){

strs=HTTPUtil.requestll(str);

}else{
            //沒有網加入資料庫
        }
        Message message = new Message();
        message.what=0;
        message.obj=strs;
        handler.sendMessage(message);
    }
}.start();
           

}

Handler handler=new Handler(){

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

if (msg.what==0){

//擷取解析的 資料

String s= (String) msg.obj;

Gson gson=new Gson();

Userss userss = gson.fromJson(s, Userss.class);

Users result = userss.getResult();

List songlist = result.getSonglist();

//進行展示資料

listView.setAdapter(new MyAdapter(getActivity(),songlist));

}

}

};