我是android开发的新手。我正在开发一个从服务器获取数据的应用程序。它工作正常但滞后于设备屏幕,因为它在UI线程中工作。所以我使用asynctask获取数据并在recyclerview中显示它但不显示数据。请帮助我谢谢:)
代码:-in oncreateView()
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_frag_news, container, false);
list=new ArrayList<>();
dlist=new ArrayList<>();
new DataLoader().execute();
recyclerView=view.findViewById(R.id.newsrecycler);
recyclerView.setHasFixedSize(true);
recyclerAdapter=new DisplayRecyclerAdapter(list,dlist,getContext());
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(recyclerAdapter );
recyclerAdapter.notifyDataSetChanged();
return view;
}
和我的异步任务类
public class DataLoader extends AsyncTask{
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Object doInBackground(Object[] objects) {
myConnection=new MyConnection();
connection=myConnection.DatabaseConncetion1();
list.clear();
dlist.clear();
try {
statement = connection.createStatement();
resultSet = statement.executeQuery("select title,[desc] from events order by E_ID desc;");
while (resultSet.next()) {
list.add(resultSet.getString("title"));
dlist.add(resultSet.getString("desc"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
pDialog.dismiss();
}
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
new DataLoader().execute();
}
答案 0 :(得分:1)
setDialogCancelable(真);
不要使用adapter.notifidatasetchanged();在第一个时间
答案 1 :(得分:0)
删除notifyDataSetChanged()
onCreateView()
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_frag_news, container, false);
list=new ArrayList<>();
dlist=new ArrayList<>();
new DataLoader().execute();
recyclerView=view.findViewById(R.id.newsrecycler);
recyclerView.setHasFixedSize(true);
recyclerAdapter=new DisplayRecyclerAdapter(list,dlist,getContext());
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(recyclerAdapter );
//recyclerAdapter.notifyDataSetChanged(); not required
return view;
}
在AsyncTask
完成执行后,通知适配器数据已更改。只需在notifyDataSetChanged()
中为此{
}致电onPostExecute()
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
pDialog.dismiss();
recyclerAdapter.notifyDataSetChanged();
}