E / RecyclerView:未连接适配器;跳过布局Android Studio RecyclerView

时间:2020-09-09 05:46:05

标签: java android android-recyclerview

我正在创建一个类似TikTok的社交应用。我正在学习教程,但遇到了问题。我的新闻提要无法加载。我不断收到此错误E/RecyclerView: No adapter attached; skipping layout。根据我在其他问题上看到的内容,适配器有问题。

我没看到任何问题,它前段时间运行良好。我阅读了不同问题下的其他答案,但仍然找不到解决我问题的方法。有人可以向我指出吗?

public class HomeActivity extends AppCompatActivity {

    private ArrayList<MediaObject> mediaObjectList = new ArrayList<>();
    private VideoPlayerRecyclerView recyclerview;
    public static ApiInterface apiInterface;

    private static final int CAMERA_PERMISSION_REQUEST_CODE = 88888;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
        init();
    }

    private void init() {

        if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {

            setWindowFlag(this, WindowManager.LayoutParams. FLAG_TRANSLUCENT_STATUS, true);
        }

        if (Build.VERSION.SDK_INT >= 19){

            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        }

        // Make fully Android Transparent Status Bar
        if (Build.VERSION.SDK_INT >= 21) {

            setWindowFlag(this, WindowManager.LayoutParams. FLAG_TRANSLUCENT_STATUS, false);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }

        //////////////////////////// recycler view//////////////////////////////
        recyclerview = (VideoPlayerRecyclerView) findViewById(R.id.recyclerview);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(RecyclerView.VERTICAL);
        recyclerview.setLayoutManager(layoutManager);
        layoutManager.setReverseLayout(true);
        layoutManager.setStackFromEnd(true);
        VerticalSpacingItemDecorator itemDecorator = new VerticalSpacingItemDecorator(0);
        recyclerview.addItemDecoration(itemDecorator);

        ///////////////////////////////////////////////
        SnapHelper mSnapHelper = new PagerSnapHelper();
        mSnapHelper.attachToRecyclerView(recyclerview);
        //////////////////////////////////////////////
        LoadAllPosts();
    }

    private void LoadAllPosts() {

        Call<Users> call = apiInterface.performAllPosts();
        call.enqueue(new Callback<Users>() {
            @Override
            public void onResponse(Call<Users> call, Response<Users> response) {
                if (response.isSuccessful()) {
                    mediaObjectList = response.body().getAllPosts();
                    if (mediaObjectList != null) {
                        recyclerview.setMediaObjects(mediaObjectList);
                        VideoPlayerRecyclerAdapter adapter = new VideoPlayerRecyclerAdapter(mediaObjectList, initGlide());
                        recyclerview.setAdapter(adapter);
                        adapter.notifyDataSetChanged();
                        recyclerview.setKeepScreenOn(true);
                        recyclerview.smoothScrollToPosition(mediaObjectList.size() + 1);
                    } else {
                        Toast.makeText(HomeActivity.this, "No Posts to show you.", Toast.LENGTH_SHORT).show();
                    }
                }
                else {
                    Toast.makeText(HomeActivity.this, "Network Error 1.", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<Users> call, Throwable t) {
                Toast.makeText(HomeActivity.this, "Network Error 2.", Toast.LENGTH_SHORT).show();
            }
        });
    }

    public static void setWindowFlag(@NonNull Activity activity, final int bits, boolean on) {

        Window win = activity.getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        if(on){
            winParams.flags |= bits;
        } else {

            winParams.flags &= ~bits;
        }
        win.setAttributes(winParams);
    }

    private RequestManager initGlide(){
        RequestOptions options = new RequestOptions()
                .placeholder(R.color.colorPrimaryDark)
                .error(R.color.colorPrimaryDark);

        return Glide.with(this)
                .setDefaultRequestOptions(options);
    }

    @Override
    protected void onDestroy() {
        if(recyclerview !=null)
            recyclerview.releasePlayer();
        super.onDestroy();
    }

    @Override
    protected void onStop() {
        super.onStop();

        if(recyclerview !=null)
            recyclerview.releasePlayer();
        finish();
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();

        finish();
    }

    public void followingBtn(View view) {

        Intent intent = new Intent(HomeActivity.this, FollowingActivity.class);
        startActivity(intent);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        Animatoo.animateSwipeLeft(this);
        finish();
    }

    public void addBtn(View view) {

        checkPermission();

        Intent intent = new Intent(HomeActivity.this, PortraitCameraActivity.class);
        startActivity(intent);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        Animatoo.animateSlideUp(this);
        finish();
    }

    @Override
    protected void onResume() {
        super.onResume();

        checkPermission();
    }

    private void checkPermission() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            return;
        }
        // request camera permission if it has not been grunted.
        if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ||
                checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED ||
                checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
        ) {

            requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE}, CAMERA_PERMISSION_REQUEST_CODE);
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case CAMERA_PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(HomeActivity.this, "permission has been granted.", Toast.LENGTH_SHORT).show();

                } else {
                    Toast.makeText(HomeActivity.this, "[WARN] permission is not granted.", Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

就像该消息指示的那样,您的RecyclerView没有设置适配器。仅在远程调用返回后才设置适配器,然后仅在某些情况下才设置。我会在您的init()方法中创建并设置适配器,然后在调用返回后用值填充适配器。

答案 1 :(得分:0)

您需要将此代码从LoadAllPosts()方法移至init()

VideoPlayerRecyclerAdapter adapter = new VideoPlayerRecyclerAdapter(mediaObjectList, initGlide());
recyclerview.setAdapter(adapter);

或致电:

recyclerview.setMediaObjects(mediaObjectList);

仅在致电后

recyclerview.setAdapter(adapter)
相关问题