微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我做了一个适配器,但它无法连接

如何解决我做了一个适配器,但它无法连接

我制作了一个适配器来制作回收器视图。但是会出现适配器未连续连接的错误。我确实做到了,为什么我不能?我预测这是一个线程问题,但我不知道如何解决它。请帮帮我。

public class RoomActivity extends AppCompatActivity {

    private RecyclerView rvFloor;
    private FloorAdapter floorAdapter;
    public ArrayList<FloorData> globalfloors = new ArrayList<>();
    int totalFloor;
    private RoomApi roomApi;
    private DormitoryData dormitoryData;
    private DormitoryApi dormitoryApi;
    static SharedPreferences pref;
    Retrofit retrofit;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_room);
        pref = getSharedPreferences("token",0);
        init();

        rvFloor = findViewById(R.id.rvFloors);
    }

    private void init(){
        roomApi = new Retrofit.Builder()
                .baseUrl(getString(R.string.base_url))
                .addConverterFactory(GsonConverterFactory.create())
                .build()
                .create(RoomApi.class);

        dormitoryApi = new Retrofit.Builder()
                .baseUrl(getString(R.string.base_url))
                .addConverterFactory(GsonConverterFactory.create())
                .build()
                .create(DormitoryApi.class);


        Call<DormitoryData> callGetDormitory = dormitoryApi.get_dormitory(getToken());
        Callback<DormitoryData> callback = new Callback<DormitoryData>() {
            @Override
            public void onResponse(Call<DormitoryData> call,Response<DormitoryData> response) {
                dormitoryData = response.body();
                totalFloor = dormitoryData.getStory();

                for(int i=0; i< totalFloor; i++){
                    FloorData temp = new FloorData();
                    temp.setFloorNum(i+1);
                    globalfloors.add(temp);
                }

                for(int i = 0; i<totalFloor; i++){
                    //해당 층에 있는 방들을 불러옵니다. 없을 수도 있어요.
                    Call<List<RoomData>> callRoomListByFloor = roomApi.getRooms_byFloor(getToken(),i+1);
                    if (callRoomListByFloor == null)
                        continue;
                    final FloorData floor = globalfloors.get(i);

                    //층에 있는 방들 정보를 불러옵니다.
                    Callback<List<RoomData>> callback2 = new Callback<List<RoomData>>() {
                        @Override
                        public void onResponse(Call<List<RoomData>> call,Response<List<RoomData>> response) {
                            floor.setRooms((ArrayList<RoomData>) response.body());
                            floorAdapter = new FloorAdapter(globalfloors,RoomActivity.this);
                            linearlayoutmanager manager = new linearlayoutmanager(RoomActivity.this);
                            rvFloor.setLayoutManager(manager);
                            rvFloor.setAdapter(floorAdapter);
                            floorAdapter.setonItemClickListener(new FloorAdapter.OnItemClickListener() {
                                @Override
                                public void onItemClick(View v,int position) {
                                    FloorData floor = globalfloors.get(position);
                                    RoomData newRoom = new RoomData();
                                    floor.finalRoomNum++;
                                    newRoom.setRoomNum(floor.finalRoomNum);
                                    floor.rooms.add(newRoom);
                                    rvFloor.setAdapter(floorAdapter);
                                    JsonObject json = new JsonObject();


                                    json.addProperty("floor",position+1);
                                    json.addProperty("roomNum",newRoom.getRoomNum());

                                    Call<ResponseData> call = roomApi.add_room(getToken(),json);
                                    call.enqueue(new Callback<ResponseData>() {
                                        @Override
                                        public void onResponse(Call<ResponseData> call,Response<ResponseData> response) {
                                            if(response.isSuccessful()){
                                                Toast.makeText(RoomActivity.this,response.message(),Toast.LENGTH_SHORT).show();
                                                if(response.body() == null){
                                                    Toast.makeText(RoomActivity.this,"알 수 없는 에러입니다. 개발자에게 문의하세요",Toast.LENGTH_LONG).show();
                                                    return;
                                                }

                                            }else{
                                                Toast.makeText(RoomActivity.this,response.message().toString(),Toast.LENGTH_LONG).show();
                                            }
                                        }
                                        @Override
                                        public void onFailure(Call call,Throwable t) {
                                            Log.e( "onFailure: ",t.getMessage() );
                                        }
                                    });

                                }
                            });
                        }
                        @Override
                        public void onFailure(Call<List<RoomData>> call,Throwable t) {
                            Toast.makeText(RoomActivity.this,t.getMessage(),Toast.LENGTH_LONG).show();
                        }
                    };
                    callRoomListByFloor.enqueue(callback2);
                }

            }
            @Override
            public void onFailure(Call<DormitoryData> call,Throwable t) {
                Toast.makeText(getApplicationContext(),Toast.LENGTH_LONG).show();
            }
        };
        callGetDormitory.enqueue(callback);



    }
    public static String getToken(){
        return pref.getString("token","");
    }
}

错误信息如下。 RecyclerView:没有附加适配器;跳过布局

解决方法

嗨,我认为错误已经说明这里出了什么问题。您是否尝试将适配器添加到 RecyclerViewrvFloor onCreate

如果没有,你可以做的是设置一个新的适配器来按需提供子视图。由于在 onCreate 上设置一次适配器就可以完成这项工作,我认为您还应该在定义视图后调用 init()

rvFloor.setAdapter(floorAdapter);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。