Выполните задание несколько раз
В своей деятельности я использую класс, который простирается от AsyncTask, и параметр, который является экземпляром этого AsyncTask. Когда я вызываю readRss.execute (), все в порядке. Но приложение падает, когда я хочу обновить, которое снова вызывает readRss.execute(). Причина тогда появляется исключение которое говорит :
Cannot execute task: the task has already been executed (a task can be executed only once)
Я не хочу создавать новые экземпляры Asyntask.
public class MainActivity extends AppCompatActivity { RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recyclerview); final ReadRss readRss = new ReadRss(this, recyclerView); readRss.execute(); final SwipeRefreshLayout pullToRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_container); pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { readRss.execute(); pullToRefresh.setRefreshing(false); } }); } } }
этот класс ReadRss :
public class ReadRss extends AsyncTask<Void, Void, Void> { Context context; String address = "http://karar.com/XMLFile1.xml"; ProgressDialog progressDialog; ArrayList<FeedItem> feedItems; RecyclerView recyclerView; URL url; public ReadRss(Context context, RecyclerView recyclerView) { this.recyclerView = recyclerView; this.context = context; progressDialog = new ProgressDialog(context); progressDialog.setMessage("loading...."); } @Override protected void onPreExecute() { progressDialog.show(); super.onPreExecute(); }
Что я уже пробовал:
это работа но я не думаю что это правильный путь :
вызовите new ReadRss(this, recyclerView).execute();
David Crow
- но я думаю, что это правильный путь."
А почему бы и нет?
Mike V Baker
Почему вы не хотите создавать новые экземпляры AsyncTask? Я считаю, что правильный способ сделать это-создать AsyncTask, использовать его, позволить ему выйти за рамки и очиститься.