ryotayama / Hayaemon_Android

「音楽を、もっと楽しく」をコンセプトに開発している無料音楽再生アプリです。
GNU General Public License v3.0
16 stars 2 forks source link

曲ごとのメニューボタンを押すとクラッシュするケースがある #409

Open ryotayama opened 1 month ago

ryotayama commented 1 month ago

問合せ597

Exception java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 12 at jdk.internal.util.Preconditions.outOfBounds (Preconditions.java:64) at jdk.internal.util.Preconditions.outOfBoundsCheckIndex (Preconditions.java:70) at jdk.internal.util.Preconditions.checkIndex (Preconditions.java:266) at java.util.Objects.checkIndex (Objects.java:359) at java.util.ArrayList.get (ArrayList.java:434) at com.edolfzoku.hayaemon2.PlaylistFragment.showSongMenu (PlaylistFragment.java:1897) at com.edolfzoku.hayaemon2.SongsAdapter$7.onClick (SongsAdapter.java:213) at android.view.View.performClick (View.java:7450) at android.view.View.performClickInternal (View.java:7427) at android.view.View.access$3700 (View.java:844) at android.view.View$PerformClick.run (View.java:28707) at android.os.Handler.handleCallback (Handler.java:938) at android.os.Handler.dispatchMessage (Handler.java:99) at android.os.Looper.loopOnce (Looper.java:201) at android.os.Looper.loop (Looper.java:288) at android.app.ActivityThread.main (ActivityThread.java:7980) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1009)

sugartarou commented 1 month ago

PlayListFragment.javaの該当部分 arSongs.getで渡している引数が-1になってるとなると、showSongMenuの引数nItemが-1になってることになる。

    void showSongMenu(final int nItem) {
        if (sActivity == null) return;
        sSelectedItem = nItem;
        ArrayList<SongItem> arSongs = sPlaylists.get(sSelectedPlaylist);
        final SongItem songItem = arSongs.get(nItem);

showSongMenuの呼び出し元(SongsAdapter.java) holder.getAdapterPosition()の戻り値が-1?

            holder.getImgSongMenu().setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mActivity.playlistFragment.showSongMenu(holder.getAdapterPosition());
                }
            });

getAdapterPositionはそのviewholderのitemが存在しないときに-1 (NO_POSITION)を返すらしい。 状態のクロスケース?

sugartarou commented 1 month ago

AQUOS sense4 lite かなり性能の低い端末っぽいので遅い端末でやったら再現するかも。

sugartarou commented 3 weeks ago

手元で再現手順確立できていないので未確認タグ貼ります。