Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中使用kotlin将base 64字符串转换为位图?_Android_Kotlin - Fatal编程技术网

如何在android中使用kotlin将base 64字符串转换为位图?

如何在android中使用kotlin将base 64字符串转换为位图?,android,kotlin,Android,Kotlin,根据我的要求,从API响应中,我得到了base 64字符串。我需要在kotlin android中将其转换为位图。因此,在查看stackoverflow和google中的一些示例后,我尝试了以下方法: Code: class LoginActivity : AppCompatActivity(), LogInHandler { private lateinit var viewModel: LogInViewModel private lateinit

根据我的要求,从API响应中,我得到了base 64字符串。我需要在kotlin android中将其转换为位图。因此,在查看stackoverflow和google中的一些示例后,我尝试了以下方法:

    Code:
    
       class LoginActivity : AppCompatActivity(), LogInHandler {

    private lateinit var viewModel: LogInViewModel
private lateinit var imageVieww : ImageView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
imageVieww = findViewById<ImageView>(R.id.imageVieww)
        // Binding
        val binding = DataBindingUtil.setContentView<ActivityLoginBinding>(this, R.layout.activity_login)
        // ViewModel
        this.viewModel = ViewModelProvider(this).get(LogInViewModel::class.java)
        // Setting binding params
        binding.viewModel = viewModel
        binding.handler = this
        // Watching for login result
        viewModel.getLogInResult().observe(this, Observer { result ->
            Toast.makeText(this, result, Toast.LENGTH_SHORT).show()
        })

        var imageBinary = "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"
        val imageBytes = Base64.decode(imageBinary.toByteArray(), Base64.DEFAULT)
        val decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
        println("check decoded image size:+${decodedImage.byteCount}")
        imageVieww.setImageBitmap(Bitmap.createScaledBitmap(decodedImage, 120, 120, false))

    }

    override fun onLogInClicked() {
        viewModel.performValidation()
    }

}
xml:
        <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="viewModel"
            type="com.example.samplekotlinapplication.LogInViewModel" />
        <variable
            name="handler"
            type="com.example.samplekotlinapplication.LogInHandler" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".LogInActivity">

        <TextView
            android:id="@+id/tv_login"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="18dp"
            android:gravity="center"
            android:text="@string/label_login"
            android:textSize="38sp"
            app:layout_constraintBottom_toTopOf="@id/et_username"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_chainStyle="packed" />

        <EditText
            android:id="@+id/et_username"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            android:hint="@string/hint_username"
            android:text="@={viewModel.username}"
            app:layout_constraintBottom_toTopOf="@id/et_password"
            app:layout_constraintEnd_toEndOf="@id/tv_login"
            app:layout_constraintStart_toStartOf="@id/tv_login"
            app:layout_constraintTop_toBottomOf="@id/tv_login" />

        <EditText
            android:id="@+id/et_password"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:hint="@string/hint_password"
            android:inputType="textPassword"
            android:text="@={viewModel.password}"
            app:layout_constraintBottom_toTopOf="@id/imageVieww"
            app:layout_constraintEnd_toEndOf="@id/et_username"
            app:layout_constraintStart_toStartOf="@id/et_username"
            app:layout_constraintTop_toBottomOf="@id/et_username" />

        <!--    <Button
            android:id="@+id/b_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:onClick="@{()->handler.onLogInClicked()}"
            android:text="@string/action_login"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="@id/et_password"
            app:layout_constraintStart_toStartOf="@id/et_password"
            app:layout_constraintTop_toBottomOf="@id/et_password" />-->

        <ImageView
            android:id="@+id/imageVieww"
            android:layout_width="400dp"
            android:layout_height="500dp"
            android:src="@mipmap/ic_launcher"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/et_password" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
代码:
类LoginActivity:AppCompatActivity(),LogInHandler{
私有lateinit变量viewModel:LogInViewModel
私有lateinit变量imageVieww:ImageView
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u登录)
imageVieww=findViewById(R.id.imageVieww)
//装订
val binding=DataBindingUtil.setContentView(此,R.layout.activity\u登录)
//视图模型
this.viewModel=ViewModelProvider(this.get)(LogInViewModel::class.java)
//设置绑定参数
binding.viewModel=viewModel
binding.handler=this
//监视登录结果
viewModel.getLogInResult().observe(这个,观察者{result->
Toast.makeText(this,result,Toast.LENGTH\u SHORT).show()
})
var imageBinary="(7)Gvvvvv8+fhw/vv8+fhw/vv8/9/5+Pv9/6+Pd98F9/f+8+Pd98F8/8+6+6+6+6+8+6+fff9/8+f9 ww6/8+ff8/8+fn/fn/fn/9 wfn/9-www7/9 wwwwwwwwwwwwwwwwwww8/8/8/8/8/wwwwwwwwwwwwwwwwww8/8/8/8/wwwwwwwww8/8/8/8/8/8/wwwwwwwwwww8/8/www8/8/wwwwww8/8/8/ww8/8/wwwww8/8/8/8/8/29uc/P9cmJu9MTDImIN+/r7+/vz8/P8VNQGNugV8AAF9fX8swM8月8日,8月8日,一份研究报告在一份研究报告上发表了一份研究报告。8月8日,在一份研究报告中,一份研究了一份关于一份工作的书。5月5日,一份工作+Pj/+PQCST(一份研究报告)在一份研究报告中提出了一份关于一份关于一份关于一份关于一份关于一份工作的文件,一份关于一份关于一份关于一份关于一份工作+Pj+Pj+Pj/+资格的文件,以及一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份工作的文件的文件的非政府工作的文文文文文文文文文文文文文文的研究,一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于YWZ78AAAAD///8AAP9mZv///wAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAakgalaaaaAa9EqaaaAa9EqaAaAa9Avkslme6NFQ05QYCvLpuHdRxBwW4NehxOykupZJGrmixOkFGUNQlnixJeidb0SqHgMyJSOjM1BkZomYop0Gm2Oe2Lit2Moopy7Gnwy9CjIyCSRyM0AvksLm6NfQdJ0LxNqNqNqNqNqNbNqNqNbNqNbNqNbNbNqNbNbNbJ6Zr6Zr6ZrZr2ZrZrZrZrYxRyxRyxZyxZyxZyxDxWxWxWxWxWxWxVxVxVxVxVxVkKvKvKvKKvKKK这两个10年来,这两个10年来,这两个10年来,这两个10年来,这两个10年来,这两个10年来,这两个10年来,这两个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10年来,一个10月,一个10月,一个新的政府在一个新的政府作为作为作为作为作为作为一个未来未来未来未来未来的一个新的政府的一个新的未来的一个新的政府,一个未来未来未来的未来的一个未来的未来的未来的未来的未来的未来的未来的未来,或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者JX9UNX4KA一个新的概念是一个新的概念,一个新的概念是一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的,新的概念,新的质量管理2.这个词的意思是一个词的词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词词LFFIWGJCNYG+kYMIEFkCKDs6PKAIJouyGWMS1FSKJOMRB/BOIXYJIUXFUXNWOIKEKPAGCBZSQHQ1A2EWFDEUVLYADJ5ACHSIQW6GU10BE/JG2VNCZGFO4R4D0SDQOBAHPJHIB94V/WRORKQWGRHGSQJCS+0PCZBEHAOW=”
val imageBytes=Base64.decode(imageBinary.toByteArray(),Base64.DEFAULT)
val decodedImage=BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.size)
println(“检查解码图像大小:+${decodedImage.byteCount}”)
imageVieww.setImageBitmap(位图.createScaledBitmap(decodedImage,120,120,false))
}
重写有趣的onLogInClicked(){
viewModel.performValidation()
}
}
xml:

但是当我运行应用程序时,图像没有显示在UI上。我不知道这段代码有什么问题。我被困在这里,有人能帮我解决这个问题吗。

我用不同的base64字符串测试了你的代码,它对我有效。可能是base64图像字符串有问题。请用一些在线测试图像字符串和verif来尝试你的代码y it.嗨,你能发送你检查过的base 64字符串吗..我尝试了一些在线图像字符串..它对我不起作用:(从以下链接我尝试了Hi,我尝试了你提供的base 64字符串…它仍然没有为我加载到图像视图中..我的问题出在哪里:(还有一个建议,您至少可以在将位图设置为imageview之前检查图像视图decodedImage.byteCount的大小。如果其>0字符串正在解码,那么问题不应该与解码有关,请尝试向imageview添加一些静态图像。它是否实际显示了任何图像。仍然不起作用。请将您的源代码共享到Understand更好。