如何在我的活动中存储来自 API 的数据



我从 api 获取 json 数据,然后使用 gson 将其转换为数据类 我想要的是:

1 - 存储数据以减少对 API 的 Http 请求,并能够刷新数据
2 - 访问另一个活动中的数据

我试过:

1 - 将带有 Intent 的数据传递给第二个活动并且它有效,但是当我回到主活动时,我必须执行另一个 Http 请求来获取数据

2-使用onSaveInstanceStateonRestoreInstanceState存储数据类对象,但是当我回到主活动时onRestoreInstanceState永远不会接到调用

class carView : AppCompatActivity() {
val TAG = "Volly"
lateinit var dataObject : Bundle
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_car_view)
if(savedInstanceState == null){
getData()
}else{
dataObject.putSerializable("all_cars",savedInstanceState.getSerializable("all_cars"))
}
Log.i(TAG," the object is $dataObject")
recycler_View.layoutManager = LinearLayoutManager(this)
recycler_View.adapter = mainAdapter(dataObject.getSerializable("all_cars") as Cars)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
super.onRestoreInstanceState(savedInstanceState)
Log.i(TAG,"onRestoreInstanceState")
val Object = savedInstanceState?.getSerializable("all_cars") as Cars
recycler_View.adapter = mainAdapter(Object)
Log.i(TAG,"Object is ${Object}")
}
override fun onSaveInstanceState(outState: Bundle?) {
super.onSaveInstanceState(outState)
Log.i(TAG,"onSaveInstanceState")
val Object = intent.extras?.get("Extra_object") as Cars
outState?.putSerializable("all_cars",Object)
}
fun getData(){
val url = "http://192.168.1.100:5000/car/getCars"
val oRequest = object : StringRequest(
Request.Method.GET,
url,
Response.Listener { response ->
try {
val gson = GsonBuilder().create()
val result = gson.fromJson(response,Cars::class.java)
Log.i(TAG,"the list ${result}")
dataObject.putSerializable("all_cars",result)
}catch (e : JSONException){
e.printStackTrace()
}
},
Response.ErrorListener { err ->
Log.i(TAG,"err {$err}")
}){
}
oRequest.retryPolicy = DefaultRetryPolicy(20* 1000 , 0 , DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)
val requestQ = Volley.newRequestQueue(this)
requestQ.add(oRequest)
}
}
data class Cars(val cars:List<CarModel>?) : Serializable
data class CarModel(
var _id     : String,
var name    : String,
var ownerId : String,
var image   : String
//    var profile: List<imageData>
) : Serializable

使用共享首选项

Kotlin 保存信息的示例

val name = getName()
val surname = getSurname()
val saved = isSaved()
val preferences = getSharedPreferences("DATA", Context.MODE_PRIVATE)
val preferencesEditor = preferences.edit()
preferencesEditor.putBoolean("saved", saved)
preferencesEditor.putString("name", name)
preferencesEditor.putString("surname", surname)
preferencesEditor.apply()

Kotlin 获取信息的示例

val preferences = getSharedPreferences("DATA", Context.MODE_PRIVATE)
val saved = preferences.getBoolean("saved", false /*Default value*/)

从 API 获取数据后,将数据存储在共享首选项中,并在 onCreate 中编写代码以获取以前使用共享首选项存储的数据。现在,每当您的活动开始时,请检查数据是否在共享首选项中可用(如果可用),请将其发送到第二个活动(如果不可用),然后进行 API 调用。

最新更新