Я использую 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();
}
}
Залп был реализован AsyncTask/Нить для всех тяжелых запрос и уведомляет вас, когда задача выполнена, Так почему же вы снова реализовать? –
Поистине, мое приложение основано на примере видео уроков и хочет выяснить, как реализовать autoupdate recycleview – hilsofbeard