Error java.lang.IllegalStateException: gson1.fromJson(json,type) must not be null

Я только учусь создавать приложения в android studio и столкнулся с такой ошибкой: java.lang.IllegalStateException: gson1.fromJson(json,type) must not be null. Что мне делать, чтобы решить проблему? Мой код:

class Second_activity : Activity() {
     var currentDate = Date()
     var curDate: DateFormat = SimpleDateFormat("dd.MM.yyyy", Locale.getDefault())
     var datetext = curDate.format(currentDate)
     var list = ArrayList<model>()
     lateinit var mRecyclerView: RecyclerView
     var mAdapter = MyAdapter(list, this)
     lateinit var sharedPreferences1:SharedPreferences
//     val sharedPreferences = getSharedPreferences("perenos",Context.MODE_PRIVATE)
//     val perenos= sharedPreferences.getString("peren", "").toString()
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.window_2)
//        val sharedPreferences = getSharedPreferences("perenos",Context.MODE_PRIVATE)
//        val perenos= sharedPreferences.getString("peren", "").toString()
//         if (list.size <1){
//         list.add(model(perenos, "Создано: $datetext", "cascas", "10 words"))}
        addFirst()
         loaddata(key = "list1")
         buildRecyclerView()

     }

     fun buildRecyclerView() {
         mRecyclerView = findViewById<RecyclerView>(R.id.rcview)
         mRecyclerView.setHasFixedSize(true)
         mAdapter = MyAdapter(list, this)
         mRecyclerView.layoutManager = LinearLayoutManager(this)
         mRecyclerView.adapter = mAdapter
     }

     fun onclickadd1(view: View) {
         var name: String
         val mDialogView = LayoutInflater.from(this).inflate(R.layout.colldialog, null)
         val mBuilder = AlertDialog.Builder(this).setView(mDialogView)
         val mAlertDialog = mBuilder.show()
         mDialogView.bt2.setOnClickListener {
             mAlertDialog.dismiss()
             name = mDialogView.edttxt.text.toString()
             insertItem(name, "gs", "fga", "fge")
         }
         mDialogView.bt1.setOnClickListener { mAlertDialog.dismiss() }

     }

     fun savedata(key: String) {
         sharedPreferences1 = getSharedPreferences("collection", Context.MODE_PRIVATE)
         var editor = sharedPreferences1.edit()
         var gson:Gson = Gson()
         var json = gson.toJson(list).toString()
         editor.putString(key, json)
         editor.apply()
     }

     fun loaddata(key: String) {
         sharedPreferences1 = getSharedPreferences("collection", Context.MODE_PRIVATE)
         var gson1:Gson = Gson()
         var json:String
                 json= sharedPreferences1.getString(key,null).toString()
         var type = object : TypeToken<ArrayList<model>>() {}.type
         list = gson1.fromJson(json,type)
         if (list == null)
             list= ArrayList()
     }

     fun insertItem(str1: String, str2: String, str3: String, str4: String) {
         list.add(0, model(str1, str2, str3, str4))
         mAdapter?.notifyDataSetChanged()
}
override fun onDestroy() {
          super.onDestroy()
          savedata(key = "list1")
         }

     }

Думаю, что проблема в функции loaddata.


Ответы (1 шт):

Автор решения: Komdosh

Проблема в том случае, если в SharedPref по вашему ключу нет данных, то вернётся null, затем вы делаете из него строку "null", можете заменить кода таким образом

 fun loaddata(key: String) {
     sharedPreferences1 = getSharedPreferences("collection", Context.MODE_PRIVATE)
     var gson1:Gson = Gson()
     var json: String = sharedPreferences1.getString(key, "[]")
     var type = object : TypeToken<ArrayList<model>>() {}.type
     list = gson1.fromJson(json,type) //всегда будет list, null не будет
 }
→ Ссылка