为啥 doInbackground 方法不能有空体?
Posted
技术标签:
【中文标题】为啥 doInbackground 方法不能有空体?【英文标题】:Why can't doInbackground method have empty body?为什么 doInbackground 方法不能有空体? 【发布时间】:2019-10-04 19:37:53 【问题描述】:我有一个扩展 AsyncTask
的类。我传入一个胆固醇监测器列表并在onPostExecute
中创建片段。但是,doInbackground
不能是空方法,onPostExecute
也不能正确覆盖?
private class CholesterolFragment extends AsyncTask<ArrayList<CholesterolMonitor>, Void, Void>`
@Override
protected Void doInBackground(ArrayList<CholesterolMonitor>... arrayLists)
@Override
protected void onPostExecute(ArrayList<CholesterolMonitor> result)
cholesterol_monitor= result;
monitorListFragment = MonitorListFragment.newInstance(cholesterol_monitor);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_monitor_layout, monitorListFragment)
.commit();
在我的 onCreate 中,我传入了胆固醇监测列表:
monitor_list= this.getIntent().getParcelableArrayListExtra("monitorList");
cholesterol_monitor = (ArrayList<CholesterolMonitor>) monitor_list;
CholesterolFragment cholesterolFragment= new CholesterolFragment();
cholesterolFragment.execute(cholesterol_monitor);
【问题讨论】:
如果你的 doInBackground 是空的,你为什么要使用 AsyncTask? 我需要在将 Intent 传递到 Fragment 之前获取它。它一直返回空引用指针,所以我认为它可能在获得意图之前已经创建了片段? 【参考方案1】:使用空的 doInBackground 进行异步任务是没有意义的,此时您不会异步执行任何操作。你也可以直接在主线程上做。
但答案是 doInBackground 返回一个值。所以body可以返回null;但它需要回报。
【讨论】:
以上是关于为啥 doInbackground 方法不能有空体?的主要内容,如果未能解决你的问题,请参考以下文章
在 client.execute(httpGet) 上的 doInBackground() 行上发生崩溃。为啥?