我在StackOverflow的职业生涯中有一个第一个问题。我希望是你帮我。
发生了什么:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.recycler_view, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.my_recycler_view);
textViewErrorMsg = (TextView) view.findViewById(R.id.tv_error_message);
progressBarLoading = (ProgressBar) view.findViewById(R.id.pb_loading);
new TakeDates().execute();
return view;
}
@SuppressLint("StaticFieldLeak")
class TakeDates extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(getActivity());
progressDialog.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_DIM_BEHIND);
progressDialog.setMessage("Loading places...");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
try {
Thread.sleep(2200);
populateFromJson();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (progressDialog.isShowing())
progressDialog.dismiss();
}
}
private void populateFromJson() {
ConnectivityManager conMgr = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
assert conMgr != null;
NetworkInfo i = conMgr.getActiveNetworkInfo();
if (i != null && i.isConnected() && i.isAvailable()) {
ApiService api = RetroClient.getApiService(PLACES_URL);
Call<PlaceList> call = api.getMyJSON();
call.enqueue(new Callback<PlaceList>() {
@Override
public void onResponse(Call<PlaceList> call, Response<PlaceList> response) {
if (response.isSuccessful()) {
itemList = response.body().getItemList();
adapter = new RecyclerViewPlaceAdapter(itemList, getContext());
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
showPlaces();
} else {
showErrorMessage("Try to restart your app.");
}
}
@Override
public void onFailure(Call<PlaceList> call, Throwable t) {
showErrorMessage("Here is the main error: " + t.getMessage() + "\nTry to restart your app.");
}
});
} else {
showErrorMessage("Internet Connection Not Available" + "\nTry to find better connection to the internet.");
}
}
@Override
protected Void doInBackground(Void... voids) {
try {
Thread.sleep(2200);
populateFromJson();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
populateFromJSON()
尝试使用recicleview
。视图(和视图子类)对象不能从活动线程以外的任何线程使用。
在AsyncTask上执行.execute()
时,onpreexecute
和onpostexecute
将由活动线程执行,doinbackground
由子线程执行。
一旦了解了这一点,您就很容易理解,为了避免该错误,您应该在onPostExecute
中调用populateFromjson()
N.B.如果您的doInBackground方法真的需要等待,那么有更有效的方法可以做到这一点。看看这里和这里
我是从我的应用程序连接到互联网的小新,所以我得到了这个错误,我的代码在这里。 UyariPencerem 和kulaniciKontrol 和 islemTamam 代码 感谢您的帮助...
这是在一次Android采访中被问到的。有人问我是否可以从异步任务 1 的 doInBackground() 方法(让它成为 Task1)启动另一个异步任务(让它成为 Task2)。我浏览了文档,其中说了以下内容: 必须在UI线程上创建任务实例。 必须在 UI 线程上调用 execute(Params...)。 根据这些陈述,我认为从另一个任务的后台方法启动一个任务是不可能的。此外,async任务
这可能是一个更巧妙的问题,但我在ViewComponent类中有以下方法 所以我的问题是我应该采取什么方法?让异步在那里与警告无关,还是有一个解决方案/修复这个警告?它对我的项目有那么大的影响吗? 谢了!
本文向大家介绍Django异步任务线程池实现原理,包括了Django异步任务线程池实现原理的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Django异步任务线程池实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 当数据库数据量很大时(百万级),许多批量数据修改请求的响应会非常慢,一些不需要即时响应的任务可以放到后台的异步线程中
我有一个应用程序,它使用JSON定期(固定时间间隔,20秒)从服务器请求数据。 我目前的实现包括在一个异步任务中有一个循环,有一个20秒的“睡眠”条件。然而,这似乎不是一个好的实现。我的问题是有没有更好的实施方案。还有,有没有一种好的方法可以从主线程中强制停止异步任务。? 另一种选择是更改代码,让客户机发送一个请求,让服务器让服务器循环返回答案。哪一种更好的实施方式提前感谢:)
本文向大家介绍Android的异步任务AsyncTask详解,包括了Android的异步任务AsyncTask详解的使用技巧和注意事项,需要的朋友参考一下 AsyncTask,顾名思义,异步任务。说到异步,最简单的理解就是不同步。再复杂一点理解,就得举例子了。 假设我要去火车站买票,刚到火车站我突然发现我忘了带身份证。怎么办?怎么办! 想办法,想办法!我想我应该找个在学校的同学帮我送过来,因为我不