我尝试使用Tmdb api查找一些电影,但有问题。
[我每次在EditText
上做某事时都需要执行Asynctask,但是任务要更长一些。
可以等待fetchData
的onPostExecute完成吗?
我的创建AsyncTask的fetchData类:
protected Void doInBackground(Void... voids) {
//make things...
}
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
SearchActivity.listFinale = list;
}
我的SearchActivity的一部分:
public static RecyclerView rv;
public static ArrayList<Movie> listFinale = new ArrayList<Movie>();
recherche.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
fetchData process = new fetchData(recherche.getText().toString());
process.execute();
//I want to do this part when onPostExecute is finish
rv.setLayoutManager(new LinearLayoutManager(SearchActivity.this));
MyAdapter mMyadapter= new MyAdapter(listFinale);
rv.setAdapter(mMyadapter);
mMyadapter.setonItmeClickListener(SearchActivity.this);
//
}
@Override
public void afterTextChanged(Editable s) {
}
});
我的建议是,您可以学习改装,rxjava rxandroid(反应式编程)库。通过这种方式,您可以与接口进行通信。您可以创建一个接口并在SearchActivity中实现。
public interface IResultListener {
void onResult(List<BlaBlaModel> list);
}
然后,在SearchActivity中实施。
private IResultListener resultListener = new IResultListener() {
@Override
public void onResult(List<BlaBlaModel> list) {
// do anything...
}
};
然后,我们将此接口对象分配给asynctask。结果完成后,我们将带有这样的接口对象的列表发送到SearchActivity。
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (listener != null) {
listener.onResult(list)
}
}