首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android游标不适用于带有Android嵌入v2的颤振插件

Android游标不适用于带有Android嵌入v2的颤振插件
EN

Stack Overflow用户
提问于 2021-07-08 13:46:32
回答 1查看 222关注 0票数 0

我使用一个插件来获取Android中文件的绝对路径,助手类是这一个。

前面的链接是一个来自颤振插件的分叉,它返回照片库中照片的绝对路径,带有颤振嵌入的V1和正常工作。Uri是content://media/external/images/media/41

现在,我正在尝试将其应用到一个带有颤振Android嵌入V2的插件中。叉子是这里。正如您可以看到的那样,这里使用硬编码的Uri直接调用助手:

代码语言:javascript
复制
FileDirectory.getAbsolutePath(context, Uri.parse("content://media/external/images/media/41"))

在helper类中,这基本上是另一个插件的复制粘贴,程序返回代码上的错误:

代码语言:javascript
复制
private fun getDataColumn(context: Context, uri: Uri, selection: String?,
                              selectionArgs: Array<String>?): String? {
        var cursor: Cursor? = null
        val column = "_data"
        val projection = arrayOf(column)

        try {
            cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
            if (cursor != null && cursor.moveToFirst()) {
                val column_index = cursor.getColumnIndexOrThrow(column)
                return cursor.getString(column_index)
            }
        } finally {
            cursor?.close()
        }
        return null
    }

上面的这段代码在颤振嵌入V1 上正确地工作,而在V2上没有。经过一些肮脏的调试后,我了解到:

对于Android嵌入V1的颤振插件:

context类型等于io.flutter.app.FlutterApplication

cursor!!.moveToFirst()是真的

cursor!!.getCount()为1

对于Android嵌入V2的颤振插件:

context类型等于android.app.Application

cursor!!.moveToFirst()是假的

cursor!!.getCount() is %0

我认为问题在于插件如何获得应用程序上下文,因为V1是由Registrar提供的。

代码语言:javascript
复制
    companion object {
        @JvmStatic
        fun registerWith(registrar: Registrar) {
            val channel = MethodChannel(registrar.messenger(), "flutter_absolute_path")
            channel.setMethodCallHandler(FlutterAbsolutePathPlugin(registrar.context()))
        }
    }

相反,V2是由ActivityAware给出的,如本回答所示

代码语言:javascript
复制
    private fun doOnAttachedToEngine(messenger: BinaryMessenger) {
        methodChannel = MethodChannel(messenger, "flutter_file_dialog")
        methodChannel?.setMethodCallHandler(this)
        context = pluginBinding!!.applicationContext
    }

另一件事是,如果我尝试在我的应用程序中使用带有embeddingV1的插件,我会得到以下错误,所以我不能使用它。

代码语言:javascript
复制
 java.lang.RuntimeException: Unable to start activity ComponentInfo{net.altermundi.elrepoio/net.altermundi.elrepoio.MainActivity}: java.lang.IllegalStateException: registrar.context() must not be null
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-13 14:43:14

在把代码清理到最低限度后,我就开始工作了。可能是embeddingv2插件出了问题,但是使用是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68302885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档