java - E/RecyclerView : No adapter attached; skipping layout. AsyncTask 中的问题

标签 java android

我想使用 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/

相关文章:

android - WebView.scrollTo 动画

android - 在 Android Studio XML 的预览部分显示自定义字体或 View

Android谷歌地图异步任务添加标记

java - 检测霍夫圆android

Android - 发送广播开销

java - 在 Java 中带有永久提示的 EditText

java - Itext 的多重签名 - 现有签名 block 的问题

java - 指令 "filled-new-array"什么时候出现?

java - 将JUL相关的log4j 1.2配置转换为log4j 2配置

java - "String index out of bounds exception"随机文字游戏玩法错误