代码之家  ›  专栏  ›  技术社区  ›  Cyrus the Great

当用户信息来自rx中的行为主体时,Glide不显示用户图像

  •  0
  • Cyrus the Great  · 技术社区  · 6 年前

    我有用户插入用户名和密码的登录活动。用户登录后,客户端接收到的所有用户信息都存储在领域数据库中。在mainActivity中,这些信息被读取,而glide image user则显示在ImageView中。用户图像是字节数组:我正在使用MVP设计模式:

    private void loadProfileUserImage() {
            RequestOptions requestOptions = new RequestOptions();
            requestOptions.placeholder(R.drawable.shadow);
            requestOptions.circleCropTransform();
            requestOptions.transforms(new CenterCrop(), new RoundedCorners(300));
            Glide.with(view.getContext())
                    .load(userInfo.getUserImage())
                    .apply(requestOptions)
                    .into(view.getProfilePic());
        }
    

    一切正常,图像用户显示在imageView中。在mainActivity中,我有一个卡片视图。当用户单击我的卡时,所有用户信息都会通过rx和intent发送到UserInfoActivity。我正在使用 BehaviorSubject 用于发送用户信息:

    view.getCard1().setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            RxBus.getSubject().onNext(userInfo);
            activity.startActivity(new Intent(activity,UserInfoActivity.class));
        }
    });
    

    在里面 UserInfoPresenter 我想向用户显示所有用户信息。我已在UserInfo布局中创建了图像视图:

    <ImageView
        android:id="@+id/iv_user_profile"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:layout_marginTop="32dp"
        android:scaleType="centerCrop" />
    

    在getSubject的UserInfopresenter中,我获得了用户信息,最后我想通过glid显示用户图像。但什么都没有发生,用户图像也不会由glid显示: userInfo 声明为字段。

    userInfo = new User();
    compositeDisposable.add(
            MainPresenter.RxBus.getSubject()
            .subscribeWith(new DisposableObserver<User>() {
                @Override
                public void onNext(User o) {
                    userInfo = o;
                    loadProfileUserImage();
                }...
    

    和loadProfile方法:

    private void loadProfileUserImage() {
        RequestOptions requestOptions = new RequestOptions();
        requestOptions.placeholder(R.drawable.shadow);
        requestOptions.circleCropTransform();
        requestOptions.transforms(new CenterCrop(), new RoundedCorners(300));
        Glide.with(view.getContext())
                .load(userInfo.getUserImage())
                .apply(requestOptions)
                .into(view.getProfilePic());
    }
    

    我没有收到任何错误,甚至 placeholder drawable 在imageView中未显示!!!就像glid不存在也不工作一样。我为debugin设置了制动点,以确保收到正确的 User object 在本部分中:

    @Override
    public void onNext(User o) {
          userInfo = o;
          loadProfileUserImage();
    }
    

    用户已完全接收,我可以在调试模式下看到用户图像字节数组。

    发生了什么,你的想法是什么?

    *****************编辑*********************

    调试模式映像:

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   Cyrus the Great    6 年前

    我终于发现,我的问题在哪里。 我正在使用dagger来注入依赖项 UserInfoView 在其构造函数中:

    @Inject
    public UserInfoView(Activity activity) {
        super(activity);
        this.activity = activity;
    

    这样看来,右视图并没有被注入presenter类,因为我已经通过presenter的构造函数注入了presenter:

    @Inject
    public UserInfoPresenter(UserInfoView view, Activity activity) {
        this.view = view;
        this.activity = activity;
    }
    

    当我将UserInfoView放入模块时:

    @Provides
    @UserInfoScope
    public UserInfoView view() {
        return new UserInfoView(activity);
    }
    

    并运行应用程序,显示用户图像配置文件,然后glid执行正确的操作。