Member 13366692 Ответов: 0

Выполните задание несколько раз


В своей деятельности я использую класс, который простирается от 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, использовать его, позволить ему выйти за рамки и очиститься.

0 Ответов