Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java E/RecyclerView:未连接适配器;跳过布局。异步任务中的问题_Java_Android - Fatal编程技术网

Java E/RecyclerView:未连接适配器;跳过布局。异步任务中的问题

Java E/RecyclerView:未连接适配器;跳过布局。异步任务中的问题,java,android,Java,Android,我想使用Jsoup从一些网站检索数据,并将这些数据放在RecyclerView中。当然,我在AsyncTask中做的第一部分。但当AsyncTask检索数据时,它不会显示在我的活动中,我会得到E/RecyclerView:没有连接适配器;跳过布局错误。这是我的密码 异步任务: public class MyAsyncTask extends AsyncTask<Void, ArrayList<Game>, ArrayList<Game>> { Activit

我想使用Jsoup从一些网站检索数据,并将这些数据放在RecyclerView中。当然,我在AsyncTask中做的第一部分。但当AsyncTask检索数据时,它不会显示在我的活动中,我会得到E/RecyclerView:没有连接适配器;跳过布局错误。这是我的密码

异步任务:

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);
}
公共类MyAsyncTask扩展了AsyncTask{
活动;
public AsyncResponse AsyncResponse=null;
连接;
公共MyAsyncTask(活动){
这个。活动=活动;
}
ProgressBar-pb;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pb=activity.findViewById(R.id.gamesActivity\u progressBar);
铅.可见光(可见光);
connection=Jsoup.connect(myURL);
}
@凌驾
受保护的ArrayList doInBackground(无效…无效){
ArrayList gamesList=新建ArrayList();
试一试{
Document doc=connection.get();
Elements games=doc.select(“一些css选择器”);
for(元素元素:游戏)
{
Element loser=elem.select(“一些css选择器”).first();
Element winner=elem.select(“一些css选择器”).first();
Element\u points=elem.select(“一些css选择器”).first();
Element winner_points=elem.select(“一些css选择器”).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();
添加(新游戏(赢家、输家、赢家、输家、输家);
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回游戏列表;
}
@凌驾
受保护的void onPostExecute(ArrayList字符串){
pb.setVisibility(视图不可见);
asyncResponse.processFinish(字符串);
}
}

活动:

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);
    }
}
公共类GamesActivity扩展AppCompatActivity实现异步响应{
MyGamesAdapter适配器;
回收视图回收视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_games);
recyclerView=findViewById(R.id.gamesActivity\u recyclerView);
MyAsyncTask asyncTask=新的MyAsyncTask(此);
asyncTask.asyncResponse=this;
asyncTask.execute();
}
@凌驾
公共void processFinish(ArrayList输出){
适配器=新的MyGamesAdapter(输出);
recyclerView.setAdapter(适配器);
}
}

在此处初始化之前,您正在尝试将适配器连接到RV

recyclerView.setAdapter(adapter);
首先尝试初始化,然后设置为RV

选项-1:

ArrayList<Game> gameList;

@Override
protected void onCreate(Bundle savedInstanceState) {

    ...

    adapter = new MyGamesAdapter(gameList);
    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);
}

如果您遵循选项-2,那么不要忘记删除
recyclerView.setAdapter(适配器)来自onCreate@Sa1m0n,你查过了吗?哦,我现在明白我的错误了。只是忘了添加布局管理器。行:recyclerView.setLayoutManager(新的LinearLayoutManager(this));使它工作。@Sa1m0n,听起来不错,如果你认为它对你有帮助,那么接受答案并按upvote。谢谢如果您遵循选项-2,那么不要忘记删除
recyclerView.setAdapter(适配器)来自onCreate@Sa1m0n,你查过了吗?哦,我现在明白我的错误了。只是忘了添加布局管理器。行:recyclerView.setLayoutManager(新的LinearLayoutManager(this));使它工作。@Sa1m0n,听起来不错,如果你认为它对你有帮助,那么接受答案并按upvote。谢谢