Skip to content

[JavaKit] @JavaImplementation method returning a null instance from Swift to Java #272

@colemancda

Description

@colemancda

I'm trying to wrap RecyclerView.Adapter in Android and create the row view from Swift and pass it to Java via JNI. Unfortunately on the Java / Kotlin side the returned value is always null.

RecyclerViewAdapter.kt

// Create new views (invoked by the layout manager)
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewAdapter.ViewHolder {
        val viewHolder = onCreateViewHolderSwift(parent, viewType)
        checkNotNull(viewHolder)
        checkNotNull(viewHolder.itemView)
        return viewHolder
    }

RecyclerViewAdapter.swift

@JavaImplementation("com.pureswift.swiftandroid.RecyclerViewAdapter")
extension RecyclerViewAdapter {
    
    @JavaMethod
    public func onCreateViewHolderSwift(_ viewGroup: ViewGroup?, _ viewType: Int32) -> RecyclerViewAdapter.ViewHolder? {
        log("\(self).\(#function) \(viewType)")
        let viewHolder = callback.onCreateViewHolder(viewGroup!, viewType)
        log("\(self).\(#function) Created \(viewHolder.getClass().getName()) \(viewHolder.itemView.getClass().getName())")
        return viewHolder
    }

I've verified from the Swift side that the Java Object I'm returning is a valid instance, and print their Java class name. But the checkNotNull() still fails on the JVM side.

16:57:54.394  D  SwiftAndroidApp.RecyclerViewAdapter.onCreateViewHolderSwift(_:_:) Created com.pureswift.swiftandroid.RecyclerViewAdapter$ViewHolder android.widget.TextView
16:57:54.394  D  Shutting down VM
16:57:54.395  E  FATAL EXCEPTION: main
Process: com.pureswift.swiftandroid, PID: 7551
java.lang.IllegalStateException: Required value was null.

Android.zip

android-crash.log

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions