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 не будет
}