2015-07-05 3 views
0

Я использую Asynctask для загрузки данных через Volley. Я хочу сделать, что AsyncTask вызывается через n минут, может быть, это дубликат и глупый вопрос, но я не могу понять, как его реализовать. Может быть, мне нужно реализовать AsyncTask в моем фрагменте?Использование AsyncTask с таймером во фрагменте

Это мой AsyncTask.class

package com.aa.qc.task; 

import android.os.AsyncTask; 

import com.aa.qc.callbacks.ZleceniaLoadedListner; 
import com.aa.qc.extras.ZleceniaSorter; 
import com.aa.qc.extras.ZleceniaUtils; 
import com.aa.qc.network.VolleySingleton; 
import com.aa.qc.pojo.Zlecenia; 
import com.android.volley.RequestQueue; 

import java.util.ArrayList; 


public class TaskLoadZlecenia extends AsyncTask<Void, Void, ArrayList<Zlecenia>>{ 

    private ZleceniaLoadedListner myComponent; 
    private VolleySingleton volleySingleton; 
    private RequestQueue requestQueue; 
    private ZleceniaSorter mSorter = new ZleceniaSorter(); 


    public TaskLoadZlecenia(ZleceniaLoadedListner myComponent) { 
     this.myComponent = myComponent; 
     volleySingleton = VolleySingleton.getsInstance(); 
     requestQueue = volleySingleton.getmRequestQueue(); 

    } 


    @Override 
    protected ArrayList<Zlecenia> doInBackground(Void... params) { 

     ArrayList<Zlecenia> listZlecenias = ZleceniaUtils.loadZlecenia(requestQueue); 
     mSorter.sortZleceniaByTime(listZlecenias); 
     return listZlecenias; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Zlecenia> listZlecenias) { 
     if (myComponent != null) { 
      myComponent.onZleceniaLoaded(listZlecenias); 

     } 
    } 

} 

Это listner.class

package com.aa.qc.callbacks; 

import com.aa.qc.pojo.Zlecenia; 

import java.util.ArrayList; 

public interface ZleceniaLoadedListner { 
    public void onZleceniaLoaded(ArrayList<Zlecenia> listZlecenias); 
} 

Это мой фрагмент, где я хочу повторить AsyncTask (я имею деятельность с двумя вкладками, каждая из вкладок a)

public class FragmentZlecenia extends Fragment implements SortListener, ZleceniaLoadedListner, SwipeRefreshLayout.OnRefreshListener { 

    // TODO: Rename parameter arguments, choose names that match 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 

    private ArrayList<Zlecenia> listZlecenias = new ArrayList<>(); 
    private RecyclerView zleceniaArrived; 
    private AdapterZlecenia adapterZlecenia; 

    private SwipeRefreshLayout mSwipeRefreshLayout; 
    private ZleceniaSorter mSorter = new ZleceniaSorter(); 


    // TODO: Rename and change types of parameters 
    private String mParam1; 
    private String mParam2; 


    /** 
    * Use this factory method to create a new instance of 
    * this fragment using the provided parameters. 
    * 
    * @param param1 Parameter 1. 
    * @param param2 Parameter 2. 
    * @return A new instance of fragment FragmentZlecenia. 
    */ 
    // TODO: Rename and change types and number of parameters 
    public static FragmentZlecenia newInstance(String param1, String param2) { 
     FragmentZlecenia fragment = new FragmentZlecenia(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    } 

    public FragmentZlecenia() { 
     // Required empty public constructor 
    } 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 
    } 

    public void onSortByTime() { 
     L.t(getActivity(), "Sort by time"); 
     mSorter.sortZleceniaByTime(listZlecenias); 
     adapterZlecenia.notifyDataSetChanged(); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 

     View layout = inflater.inflate(R.layout.fragment_zlecenia, container, false); 

     mSwipeRefreshLayout = (SwipeRefreshLayout) layout.findViewById(R.id.swipeZlecenia); 
     mSwipeRefreshLayout.setOnRefreshListener(this); 


     zleceniaArrived = (RecyclerView) layout.findViewById(R.id.listZlecenia); 
     zleceniaArrived.setLayoutManager(new LinearLayoutManager(getActivity())); 

     adapterZlecenia = new AdapterZlecenia(getActivity()); 
     zleceniaArrived.setAdapter(adapterZlecenia); 

     if (savedInstanceState != null) { 
      //if this fragment starts after a rotation or configuration change, load the existing zlecenias from DB 
      listZlecenias = MyApplication.getWritableDatabase().getAllZlecenia(); 
     } else { 
      //if this fragment starts for the first time, load the list of zlecenias from a database 
      MyApplication.getWritableDatabase().deleteAll(); 
      //if the database is empty, trigger an AsycnTask to download zlecenias list from the web 
      if (listZlecenias.isEmpty()) { 
       new TaskLoadZlecenia(this).execute(); 
      } 
     } 
     //update your Adapter to containg the retrieved zlecenias 
     adapterZlecenia.setListZlecenia(listZlecenias); 

     return layout; 
    } 


    @Override 
    public void onZleceniaLoaded(ArrayList<Zlecenia> listZlecenias) { 

     L.m("onZleceniaLoaded Fragment"); 

     new TaskLoadZlecenia(this).execute(); 
     adapterZlecenia.setListZlecenia(listZlecenias); 
    } 


    @Override 
    public void onRefresh() { 
     L.t(getActivity(), "onRefresh"); 
     new TaskLoadZlecenia(this).execute(); 

    } 

} 
+0

Залп был реализован AsyncTask/Нить для всех тяжелых запрос и уведомляет вас, когда задача выполнена, Так почему же вы снова реализовать? –

+0

Поистине, мое приложение основано на примере видео уроков и хочет выяснить, как реализовать autoupdate recycleview – hilsofbeard

ответ

0

Если вы хотите отложить что-либо на n секунд, вы можете использовать CountDownTimer c Ласс как этот

new CountDownTimer(n * 1000, n * 1000) { 

    public void onTick(long millisUntilFinished) { 

    } 

    public void onFinish() { 
     //invokeAllTheThings! 
    } 
    }.start(); 

Это сделает работу :)

Смежные вопросы