I got These Errors
FATAL EXCEPTION: main
Process: com.example.mykotlinapp, PID: 19988
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:558)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Caused by: java.io.FileNotFoundException: contents.json
Hi, I am trying to create a story Book app with Kotlin but I am beginner and learning programing. and I try to create this app with local Json file (loadJsonFromAssets) with glide, in home fragment, but I got this error, I don’t know how to fix it, please help me to fix it.
Home Fragment Code
private lateinit var bookAdapter: BookAdapter
private lateinit var recyclerView: RecyclerView
private lateinit var dataList: ArrayList<BooksData>
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
val view = inflater.inflate(R.layout.fragment_home, container, false)
// Initialize the RecyclerView
dataList = ArrayList()
recyclerView = view.findViewById(R.id.bookRecyclerView)
recyclerView.layoutManager = GridLayoutManager(requireContext(), 2)
bookAdapter = BookAdapter(this@HomeFragment, dataList)
recyclerView.adapter = bookAdapter
recyclerView.setHasFixedSize(true)
loadData()
// loadJson()
return view
}
private fun loadData() {
val jsonString = loadJson("contents.json")
val items = parseJson(jsonString)
bookAdapter.setData(items)
}
private fun loadJson(contents: String): String {
val inputStream = this.requireContext().assets.open(contents)
val size = inputStream.available()
val buffer = ByteArray(size)
inputStream.read(buffer)
inputStream.close()
return String(buffer)
}
private fun parseJson(jsonString: String): ArrayList<BooksData> {
val dataList = ArrayList<BooksData>()
val jsonArray = JSONArray(jsonString)
for (i in 0 until jsonArray.length()) {
val jsonObject = jsonArray.getJSONObject(i)
val bookName = jsonObject.getString("bookName")
val imageUrl = jsonObject.getString("imageUrl")
dataList.add(BooksData(imageUrl, bookName))
}; return dataList
}
}
data class
data class BooksData(val bookName:String, val imageUrl:String){
}
Adapter class
class BookAdapter(var context: HomeFragment, private var dataList: ArrayList<BooksData>) :
RecyclerView.Adapter<BookAdapter.BookViewHolder>() {
inner class BookViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var bookNameTextView: TextView = itemView.findViewById(R.id.bookName)
var bookImageView: ImageView = itemView.findViewById(R.id.imageUrl)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookViewHolder {
val view =
LayoutInflater.from(parent.context).inflate(R.layout.book_category_item, parent, false)
return BookViewHolder(view)
}
override fun getItemCount(): Int = dataList.size
fun setData(data: ArrayList<BooksData>) {
dataList.clear()
dataList.addAll(data)
notifyDataSetChanged()
}
override fun onBindViewHolder(holder: BookViewHolder, position: Int) {
val item = dataList[position]
holder.bookNameTextView.text = item.bookName
Glide.with(context)
.load(item.imageUrl)
.placeholder(R.drawable.ic_launcher_background)
.error(R.drawable.vec_quiz)
.into(holder.bookImageView)
}
}
Json file
{
"items": [
{
"bookName": "Basic Grammar",
"imageUrl": "https://drive.google.com/uc?id=1_eVoTO4IeTW1gAbNBb_0-GWASecBNGgS"
} ,
{
"bookName": "Basic Grammar",
"imageUrl": "https://drive.google.com/uc?id=1_eVoTO4IeTW1gAbNBb_0-GWASecBNGgS"
}
]
}
Please Help me to fix this error, thanks
New contributor
Anoop Moji is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.