Skip to content

App is crashing with the following error #495

@sanjay147654

Description

@sanjay147654

java.lang.NoSuchMethodError: No direct method (Lcom/google/android/exoplayer2/RenderersFactory;Lcom/google/android/exoplayer2/trackselection/TrackSelector;Lcom/google/android/exoplayer2/LoadControl;Lcom/google/android/exoplayer2/drm/DrmSessionManager;)V in class Lcom/google/android/exoplayer2/SimpleExoPlayer; or its super classes (declaration of 'com.google.android.exoplayer2.SimpleExoPlayer' appears in /data/app/com.architectica.socialcomponents-YF9M7H9a9efK3DXdaFg6gw==/base.apk)
at im.ene.toro.exoplayer.ToroExoPlayer.(ToroExoPlayer.java:47)
at im.ene.toro.exoplayer.DefaultExoCreator.createPlayer(DefaultExoCreator.java:118)
at im.ene.toro.exoplayer.ToroExo.requestPlayer(ToroExo.java:153)
at im.ene.toro.exoplayer.PlayableImpl.ensurePlayer(PlayableImpl.java:261)
at im.ene.toro.exoplayer.PlayableImpl.ensureMediaSource(PlayableImpl.java:251)
at im.ene.toro.exoplayer.PlayableImpl.play(PlayableImpl.java:101)
at im.ene.toro.exoplayer.ExoPlayable.play(ExoPlayable.java:47)
at im.ene.toro.exoplayer.ExoPlayerViewHelper.play(ExoPlayerViewHelper.java:108)
at com.architectica.socialcomponents.adapters.holders.PostVideoViewHolder.play(PostVideoViewHolder.java:239)
at im.ene.toro.widget.PlayerManager.play(PlayerManager.java:85)
at im.ene.toro.widget.PlayerManager.play(PlayerManager.java:75)
at im.ene.toro.widget.Container.onScrollStateChanged(Container.java:335)
at im.ene.toro.widget.Container$AnimatorHelper.handleMessage(Container.java:796)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:232)
at android.app.ActivityThread.main(ActivityThread.java:7172)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:888)

My Build.gradle

//exoplayer
implementation "com.google.android.exoplayer:exoplayer:2.8.4"
implementation 'com.google.android.exoplayer:exoplayer-ui:2.8.4'
implementation "im.ene.toro3:toro:3.6.2.2804"
implementation "im.ene.toro3:toro-ext-exoplayer:3.6.2.2804"

My ViewHolder
public class PostVideoViewHolder extends RecyclerView.ViewHolder implements ToroPlayer {

public static final String TAG = PostViewHolder.class.getSimpleName();

ExoPlayerViewHelper helper;
PlayerView playerView;

public LinearLayout mediaContainer;
private LinearLayout countersLayout;
protected Context context;
public ImageView postImageView;
TextView titleTextView;
SocialTextView detailsTextView;
private TextView likeCounterTextView,userName,userSkill;
private ImageView likesImageView;
private TextView commentsCountTextView;
private TextView watcherCounterTextView;
private TextView dateTextView;
private ImageView authorImageView;
private ViewGroup likeViewGroup;

private ProfileManager profileManager;
protected PostManager postManager;

private LikeController likeController;
private BaseActivity baseActivity;

Uri mediaUri = Uri.parse("https://www.youtube.com/watch?v=0tOxrpPbx_c");
Post post;

public PostVideoViewHolder(View view, final PostViewHolder.OnClickListener onClickListener, BaseActivity activity) {
    this(view, onClickListener, activity, true);
}

public PostVideoViewHolder(View view, final PostViewHolder.OnClickListener onClickListener, BaseActivity activity, boolean isAuthorNeeded) {
    super(view);
    this.context = view.getContext();
    this.baseActivity = activity;

    playerView = view.findViewById(R.id.playerView);

    mediaContainer = view.findViewById(R.id.mediaContainer);
    postImageView = view.findViewById(R.id.postImageView);
    userName=view.findViewById(R.id.user);
    userSkill=view.findViewById(R.id.userInfo);
    likeCounterTextView = view.findViewById(R.id.likeCounterTextView);
    likesImageView = view.findViewById(R.id.likesImageView);
    commentsCountTextView = view.findViewById(R.id.commentsCountTextView);
    watcherCounterTextView = view.findViewById(R.id.watcherCounterTextView);
    dateTextView = view.findViewById(R.id.dateTextView);
    titleTextView = view.findViewById(R.id.titleTextView);
    detailsTextView = view.findViewById(R.id.detailsTextView);
    countersLayout = view.findViewById(R.id.countersContainer);

    countersLayout.setVisibility(View.VISIBLE);

    detailsTextView.setHashtagColor(Color.RED);
    detailsTextView.setOnHashtagClickListener(new SocialView.OnClickListener() {
        @Override
        public void onClick(SocialView view, CharSequence text) {

            //Toast.makeText(context, text, Toast.LENGTH_SHORT).show();

            Log.i("text","" + text);

            Intent intent = new Intent(context, HashtagPostsActivity.class);
            intent.putExtra("hashtag","" + text);
            context.startActivity(intent);
            ((Activity) context).finish();

        }
    });

    authorImageView = view.findViewById(R.id.authorImageView);
    likeViewGroup = view.findViewById(R.id.likesContainer);

    authorImageView.setVisibility(isAuthorNeeded ? View.VISIBLE : View.GONE);

    profileManager = ProfileManager.getInstance(context.getApplicationContext());
    postManager = PostManager.getInstance(context.getApplicationContext());
    FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

    view.setOnClickListener(v -> {
        int position = getAdapterPosition();
        if (onClickListener != null && position != RecyclerView.NO_POSITION) {
            onClickListener.onItemClick(getAdapterPosition(), v);
        }
    });

    likeViewGroup.setOnClickListener(view1 -> {
        int position = getAdapterPosition();
        if (onClickListener != null && position != RecyclerView.NO_POSITION) {
            onClickListener.onLikeClick(likeController, position);
        }
    });

    authorImageView.setOnClickListener(v -> {
        int position = getAdapterPosition();
        if (onClickListener != null && position != RecyclerView.NO_POSITION) {
            onClickListener.onAuthorClick(getAdapterPosition(), v);
        }
    });

}

public void bindData(Post post) {

    this.post = post;

    postManager.loadImageMediumSize(GlideApp.with(baseActivity), post.getImageTitle(), postImageView);

    likeController = new LikeController(context, post, likeCounterTextView, likesImageView, true);

    String title = removeNewLinesDividers(post.getTitle());
    titleTextView.setText(title);
    String description = removeNewLinesDividers(post.getDescription());
    detailsTextView.setText(description);
    likeCounterTextView.setText(String.valueOf(post.getLikesCount()));
    commentsCountTextView.setText(String.valueOf(post.getCommentsCount()));
    watcherCounterTextView.setText(String.valueOf(post.getWatchersCount()));

    CharSequence date = FormatterUtil.getRelativeTimeSpanStringShort(context, post.getCreatedDate());
    dateTextView.setText(date);

    if (post.getAuthorId() != null) {
        ProfileManager profileManager=new ProfileManager(context);
        profileManager.getProfileDetail(post.getAuthorId(),userName,userSkill);
        profileManager.getProfileSingleValue(post.getAuthorId(), createProfileChangeListener(authorImageView));
    }

    FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    if (firebaseUser != null) {
        postManager.hasCurrentUserLikeSingleValue(post.getId(), firebaseUser.getUid(), createOnLikeObjectExistListener());
    }
}

private String removeNewLinesDividers(String text) {
    int decoratedTextLength = text.length() < Constants.Post.MAX_TEXT_LENGTH_IN_LIST ?
            text.length() : Constants.Post.MAX_TEXT_LENGTH_IN_LIST;
    return text.substring(0, decoratedTextLength).replaceAll("\n", " ").trim();
}

private OnObjectChangedListener<Profile> createProfileChangeListener(final ImageView authorImageView) {
    return new OnObjectChangedListenerSimple<Profile>() {
        @Override
        public void onObjectChanged(Profile obj) {
            if (obj != null && obj.getPhotoUrl() != null) {
                if (!baseActivity.isFinishing() && !baseActivity.isDestroyed()) {
                    ProjectImageUtil.loadImage(GlideApp.with(baseActivity), obj.getPhotoUrl(), authorImageView);
                }
            }
        }
    };
}

private OnObjectExistListener<Like> createOnLikeObjectExistListener() {
    return exist -> likeController.initLike(exist);
}

public void bind(Uri media) {
    if (media != null){
        this.mediaUri = media;
    }
}

@NonNull
@Override
public View getPlayerView() {
    return playerView;
}

@NonNull
@Override
public PlaybackInfo getCurrentPlaybackInfo() {
    return helper != null ? helper.getLatestPlaybackInfo() : new PlaybackInfo();
}

@Override
public void initialize(@NonNull Container container, @NonNull PlaybackInfo playbackInfo) {
    if (helper == null) {
        if (mediaUri != null){
            helper = new ExoPlayerViewHelper(this, mediaUri);
        }
    }
    helper.initialize(container, playbackInfo);
}

@Override
public void play() {
    if (helper != null) helper.play();
}

@Override
public void pause() {
    if (helper != null) helper.pause();
}

@Override
public boolean isPlaying() {
    return helper != null && helper.isPlaying();
}

@Override
public void release() {
    if (helper != null) {
        helper.release();
        helper = null;
    }
}

@Override
public boolean wantsToPlay() {
    return ToroUtil.visibleAreaOffset(this, itemView.getParent()) >= 0.85;
}

@Override
public int getPlayerOrder() {
    return getAdapterPosition();
}

public interface OnClickListener {
    void onItemClick(int position, View view);

    void onLikeClick(LikeController likeController, int position);

    void onAuthorClick(int position, View view);
}

}

Let me know if you need anything else.

What i have tried:
I tried using the latest version of toro with the corresponding exoplayer version, but no success

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions