我想使用 Jsoup 从某个网站检索数据并将该数据放置在 RecyclerView 中。当然,第一部分是我在 AsyncTask 中完成的。但是当 AsyncTask 检索数据时,它没有显示在我的 Activity 中,并且我得到 E/RecyclerView: No adaptor Attached;跳过布局错误。这是我的代码。
异步任务:
public class MyAsyncTask extends AsyncTask<Void, ArrayList<Game>, ArrayList<Game>> {
Activity activity;
public AsyncResponse asyncResponse = null;
Connection connection;
public MyAsyncTask(Activity activity) {
this.activity = activity;
}
ProgressBar pb;
@Override
protected void onPreExecute() {
super.onPreExecute();
pb = activity.findViewById(R.id.gamesActivity_progressBar);
pb.setVisibility(VISIBLE);
connection = Jsoup.connect(myURL);
}
@Override
protected ArrayList<Game> doInBackground(Void... voids) {
ArrayList<Game> gamesList = new ArrayList<>();
try {
Document doc = connection.get();
Elements games = doc.select("some css selectors");
for(Element elem : games)
{
Element loser = elem.select("some css selectors").first();
Element winner = elem.select("some css selectors").first();
Element loser_points = elem.select("some css selectors").first();
Element winner_points = elem.select("some css selectors").first();
String loser_string = loser.text();
String winner_string = winner.text();
String loser_points_string = loser_points.text();
String winner_points_string = winner_points.text();
gamesList.add(new Game(winner_string, loser_string, winner_points_string, loser_points_string));
}
} catch (IOException e) {
e.printStackTrace();
}
return gamesList;
}
@Override
protected void onPostExecute(ArrayList<Game> strings) {
pb.setVisibility(View.INVISIBLE);
asyncResponse.processFinish(strings);
}
}
Activity :
public class GamesActivity extends AppCompatActivity implements AsyncResponse {
MyGamesAdapter adapter;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_games);
recyclerView = findViewById(R.id.gamesActivity_recyclerView);
MyAsyncTask asyncTask = new MyAsyncTask(this);
asyncTask.asyncResponse = this;
asyncTask.execute();
}
@Override
public void processFinish(ArrayList<Game> output) {
adapter = new MyGamesAdapter(output);
recyclerView.setAdapter(adapter);
}
}
最佳答案
您正在尝试将适配器连接到 RV,然后再在此处初始化
recyclerView.setAdapter(adapter);
首先尝试初始化,然后设置为RV
选项 - 1:
ArrayList<Game> gameList;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
adapter = new MyGamesAdapter(gameList);
recyclerView.setAdapter(adapter);
}
然后
@Override
public void processFinish(ArrayList<Game> output) {
gameList = output;
adapter.notifyDataSetChanged();
}
选项 - 2:从 onCreate 中删除 recyclerView.setAdapter(adapter);
并将其添加到 processFinish
中。检查以下内容:
@Override
public void processFinish(ArrayList<Game> output) {
adapter = new MyGamesAdapter(output);
recyclerView.setAdapter(adapter);
}
关于java - E/RecyclerView : No adapter attached; skipping layout. AsyncTask 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58843495/