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)
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.
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 {
}
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