【问题标题】:Kotlin: Code inside lamda function is unreachable while using library written in javaKotlin:使用 java 编写的库时无法访问 lambda 函数内的代码
【发布时间】:2018-07-04 13:02:11
【问题描述】:

我使用了一个图像选择器库(用 Java 编写)。它使用重写的函数向调用者活动提供选择结果。由于我的调用者活动在 kotlin 中,因此被覆盖的函数被转换为 lambda 函数。但是 lambda 函数中的代码没有被执行。这是 Java 到 Kotlin 的问题吗?还是代码有错误?

这是我的代码:

   UtilLib.getPhoto(this, ChooseType.REQUEST_ANY)
                .enqueue({ path ->
                    Picasso.with(applicationContext)
                            .load("file://$path")
                            .error(R.drawable.profile)
                            .resize(150, 150)
                            .into(ivProfilePic)
                })

库链接:https://github.com/VinayRathod/UtilLib

这也是可以完美运行的 Java 代码(Java)。

            ChooseType chooseType =
                    ((RadioButton) findViewById(R.id.choose_gallery)).isChecked() ? ChooseType.REQUEST_PICK_PICTURE :
                            ((RadioButton) findViewById(R.id.choose_camera)).isChecked() ? ChooseType.REQUEST_CAPTURE_PICTURE :
                                    ChooseType.REQUEST_ANY;
            UtilLib.getPhoto(this, chooseType)
                    .enqueue(new OnImageChooserListener() {

                        @Override
                        public void onImageChoose(String path) {
                            ivPath.setText("" + path);
                            Glide.with(MainActivity.this).load(new File(path)).into(iv);
                        }
                    });

【问题讨论】:

  • 几乎不可能回答这个问题,因为您的链接不包含库的实际源代码,因此指出代码不执行的原因纯属猜测。
  • 我会检查的..

标签: android kotlin


【解决方案1】:

我试过你的代码是这样的:

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import com.vinay.utillib.UtilLib
import com.vinay.utillib.imagechooser.ChooseType

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)

        fab.setOnClickListener { view ->
            UtilLib.getPhoto(this, ChooseType.REQUEST_ANY)
                    .enqueue({ path ->
                        Log.d("ok", "executed: $path")
                    })
        }
    }
}

而且它似乎有效: D/ok: executed: /storage/emulated/0/bichooser/1530711668746.myimage.png

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    相关资源
    最近更新 更多