Jos*_*aba 4 android exception bitmap kotlin
我目前正在处理的应用程序加载一个片段并将其呈现到 activity_main.xml ,这工作正常。问题是我实现了一个 RecyclerView 和一个 CardView,以便动态列出我的技能。得到如下错误:
java.lang.IllegalStateException:
BitmapFactory.decodeResource(ic_launcher_foreground) must not be null
Run Code Online (Sandbox Code Playgroud)
此代码位于加载相应片段的 Kotlin 片段中 ( SkillFragment )
package smartline.jjba.storyofmylife
import android.graphics.BitmapFactory
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.RecyclerView
import smartline.jjba.storyofmylife.R.id.rv
import androidx.recyclerview.widget.LinearLayoutManager
class SkillFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
inflater.inflate(R.layout.fragment_skills, container, false)
companion object {
fun newInstance(): SkillFragment = SkillFragment()
}
fun addItemsToCard(items: ArrayList<MyData>) {
items.run {
add(MyData("text 1", BitmapFactory.decodeResource(resources, R.drawable.ic_launcher_foreground)))
add(MyData("text 2", BitmapFactory.decodeResource(resources, R.drawable.ic_baseline_bar_chart_24px)))
add(MyData("text 3", BitmapFactory.decodeResource(resources, R.drawable.ic_baseline_bar_chart_24px)))
add(MyData("text 4", BitmapFactory.decodeResource(resources, R.drawable.ic_baseline_bar_chart_24px)))
add(MyData("text 5", BitmapFactory.decodeResource(resources, R.drawable.ic_baseline_bar_chart_24px)))
add(MyData("text 6", BitmapFactory.decodeResource(resources, R.drawable.ic_baseline_bar_chart_24px)))
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val _recyclerView: RecyclerView = view.findViewById(R.id.rv)
_recyclerView.layoutManager = LinearLayoutManager(this.context, LinearLayout.VERTICAL, false)
var itemList = ArrayList<MyData>()
addItemsToCard(itemList)
//creating our adapter
val adapter = RecyclerViewAdapter(itemList)
//now adding the adapter to recyclerview
_recyclerView.adapter = adapter
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的可绘制资源,但无济于事。也很高兴知道是否有我可以调用的另一种方法可以将 drawable 渲染为 Bitmap
这是我的数据类
package smartline.jjba.storyofmylife
import android.graphics.Bitmap
data class MyData(var text:String, var image: Bitmap)
Run Code Online (Sandbox Code Playgroud)
这是我的适配器代码
class ViewHolder(view: View): RecyclerView.ViewHolder(view) {
fun bindItems(data : MyData){
val _textView:TextView = itemView.findViewById(R.id.textview)
val _imageView:ImageView = itemView.findViewById(R.id.imageview)
_textView.text = data.text
_imageView.setImageBitmap(data.image)
//set the onclick listener for the singlt list item
itemView.setOnClickListener({
Log.e("ItemClicked", data.text)
})
}
}
Run Code Online (Sandbox Code Playgroud)
我在寻找什么
有关如何处理该问题的建议,或该问题是否是 Android 或 Kotlin 中的已知错误的信息。我可能可以在设备上重新安装 Android Studio,它会再次正常但不希望这种情况发生,如果我能阻止它。
这是异常日志
E/AndroidRuntime: FATAL EXCEPTION: main
Process: smartline.jjba.storyofmylife, PID: 21687
java.lang.IllegalStateException: BitmapFactory.decodeReso…e.ic_launcher_foreground) must not be null
at smartline.jjba.storyofmylife.SkillFragment.addItemsToCard(SkillFragment.kt:28)
at smartline.jjba.storyofmylife.SkillFragment.onViewCreated(SkillFragment.kt:44)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1471)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)
提前感谢这个伟大的社区!!!
更新
感谢@Kiskae,再也没有例外了!在位图中打一个问号,用于 Kotlin 空检查
data class MyData(var text:String, var image: Bitmap?)
Run Code Online (Sandbox Code Playgroud)
但没有加载图像,第一个项目也没有加载??
它不是 Android 或 Kotlin 中的错误,文档BitmapFactory.decodeResource状态如下:
解码后的位图,如果图像数据无法解码,则为 null,或者,如果 opts 为非 null,如果 opts 请求仅返回大小(在 opts.outWidth 和 opts.outHeight 中)
由于您已定义MyData为持有非空 Bitmapkotlin 插入检查以确保返回的位图不为空,这就是发生异常的地方。
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |