Skip to content

App is crashing with the following error #495

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
sanjay147654 opened this issue Jul 11, 2020 · 5 comments
Open

App is crashing with the following error #495

sanjay147654 opened this issue Jul 11, 2020 · 5 comments

Comments

@sanjay147654
Copy link

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

@xyarim
Copy link

xyarim commented Aug 6, 2020

Found a solution?

@OhhhThisVarun
Copy link

Got anything on this?

@anathefish
Copy link

Also having it

@mehdishz11
Copy link

It's because of exoPlayer version!
library not update by last version of Exoplayer.
by the way use these implementation :

implementation "im.ene.toro3:toro:3.7.0.2010003"
    implementation "im.ene.toro3:toro-ext-exoplayer:3.7.0.2010003"
    implementation "com.google.android.exoplayer:exoplayer:2.10.3"

@itmanzzz
Copy link

itmanzzz commented Jan 5, 2021

It's because of exoPlayer version!
library not update by last version of Exoplayer.
by the way use these implementation :

implementation "im.ene.toro3:toro:3.7.0.2010003"
    implementation "im.ene.toro3:toro-ext-exoplayer:3.7.0.2010003"
    implementation "com.google.android.exoplayer:exoplayer:2.10.3"

Yeah, you saved my day ^^
Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants