NoSuchMethodError: Keine virtuelle Methode enthält (I) Z in der Klasse Landroid / util / SparseArray;

Aug 21 2020

1.Wenn ich in meiner App nach dem nächsten Bild wische, stürzte die App ab und ich weiß nicht, was falsch läuft

2.Dieses Problem tritt nach dem Update auf Android 30 auf, bevor es einwandfrei funktioniert

java.lang.NoSuchMethodError: Keine virtuelle Methode enthält (I) Z in der Klasse Landroid / util / SparseArray; oder seine Superklassen (Deklaration von 'android.util.SparseArray' erscheint in /system/framework/framework.jar!classes2.dex)

class PostViewFragment : DialogFragment() {
private var player: SimpleExoPlayer? = null
private lateinit var mediaDataSourceFactory: DataSource.Factory
//var post: FeedNodeModel? = null
private val STORAGE_PERMISSION_CODE = 100
private var post: FeedNodeModel? = null

var currentPos = 0
var registeredFragments = SparseArray<SidecarPagerFragment>()
var isFirstLoad = true

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setStyle(STYLE_NORMAL, R.style.FullScreenDialogStyle)

    isCancelable = true
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    /*if (createdView != null) {
        return createdView
    }*/

    val view = inflater.inflate(R.layout.fragment_post_view, container, false)

    //post = arguments?.getSerializable("post") as FeedNodeModel?

    when (post?.__typename) {
        "GraphImage",
        "GraphStoryImage" -> {
            Picasso.get()
                    .load(post?.sourceUrl)
                    .into(view.img_post)
            view.img_post.visibility = View.VISIBLE
            view.playerView.visibility = View.GONE
            view.viewpager.visibility = View.GONE
        }
        "GraphVideo",
        "GraphStoryVideo" -> {
            Glide.with(requireContext())
                    .load(post?.thumbnailUrl)
                    .into(object : CustomTarget<Drawable>() {
                        override fun onLoadCleared(p0: Drawable?) {

                        }

                        override fun onResourceReady(p0: Drawable, p1: Transition<in Drawable>?) {
                            initializePlayer(view.playerView,
                                    post?.sourceUrl)
                        }
                    })
            view.img_post.visibility = View.GONE
            view.playerView.visibility = View.VISIBLE
            view.viewpager.visibility = View.GONE
        }
        "GraphSidecar" -> {
            val calHeight =
                    (resources.displayMetrics.widthPixels *
                            (post?.feedNodeModel?.get(0)?.dimenHeight!!)) /
                            post?.feedNodeModel?.get(0)?.dimenWidth!!

            view.txt_pager_count.text = "1/${post?.feedNodeModel?.size}" view.viewpager.layoutParams.height = calHeight view.viewpager.adapter = object : FragmentPagerAdapter(childFragmentManager, FragmentStatePagerAdapter.POSITION_NONE) { override fun getItem(p0: Int): Fragment { val fragment = SidecarPagerFragment.create(post?.feedNodeModel?.get(p0)) registeredFragments.put(p0, fragment) if (isFirstLoad) { fragment.isFirstLoad = true isFirstLoad = false } return fragment } override fun getCount(): Int = post?.feedNodeModel?.size!! } view.viewpager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrollStateChanged(state: Int) { } override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { } @RequiresApi(Build.VERSION_CODES.R) override fun onPageSelected(position: Int) { if (post?.feedNodeModel?.get(currentPos)?.__typename == "GraphVideo") { registeredFragments[currentPos]?.onPause() } currentPos = position view.txt_pager_count.text = "${currentPos+1}/${post?.feedNodeModel?.size}"

                    if (registeredFragments.contains(position)) {
                        registeredFragments[position]?.loadVideo()
                    }
                }
            })

            view.viewpager.visibility = View.VISIBLE
            view.img_post.visibility = View.GONE
            view.playerView.visibility = View.GONE
        }
    }

App-Absturz in dieser Zeile

 if (registeredFragments.contains(position)) {
                        registeredFragments[position]?.loadVideo()
                    }

Antworten

2 NickPampoukidis Sep 15 2020 at 16:24

Verwenden containsKey

/** Returns true if the collection contains [key]. */
inline fun <T> SparseArray<T>.containsKey(key: Int) = indexOfKey(key) >= 0

Einblick von meinem Teamleiter Mike