当前位置: 首页 > 知识库问答 >
问题:

如何将API中数据存储在activity中

曹恩
2023-03-14

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

1-存储数据以减少对具有刷新数据能力的api的Http请求
2-在另一个activity中访问数据

我试过:

1-将数据原意传递给第二个activity,它可以工作,但是当我回到主activity时,我必须执行另一个Http请求来获取数据

2-使用OnSaveInstanceStateOnRestoreInstanceState存储数据类对象,但当我返回主activity时,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

共有1个答案

阳文轩
2023-03-14

使用共享首选项。

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*/)
 类似资料:
  • 问题内容: 目前,我正在使用一项服务来执行操作,即从服务器检索数据,然后将数据存储在服务器本身上。 取而代之的是,我想将数据放入本地存储中,而不是将其存储在服务器上。我该怎么做呢? 问题答案: 这是我存储和检索到本地存储的代码的一部分。我使用广播事件来保存和恢复模型中的值。

  • 我用ReactJS构建了一个渐进式Web应用程序,但遇到了一个问题。我正在使用mockApi获取数据。脱机时,我的应用程序不工作,因为服务人员只缓存静态资产。 如何将HTTP GET调用从mockApi保存到缓存存储?

  • 我创建了一个TextView,它以多行显示值 ,我希望将该值保留在SQLite数据库中。这是我使用的代码: 问题是当我保存值时,整个值被插入到一个单元格中。我希望每行的值分开,然后插入到每行的单个单元格中,尽管我使用扫描器方法插入数据,但它不起作用。那有什么办法吗?

  • 问题内容: 在MySQL数据库中用PHP存储IP的最佳实践是什么?有一个名为ip2long的函数-但这仅适用于IPv4。但是IPv6呢? 我知道一个用于IPv6 IP的php函数,但是在Windows上的PHP <Version 5.3上不起作用 问题答案: 可以将点分十进制IPv4地址转换为整数,最大大小为32位。IPv6地址是128位。由于128位不适合PHP int,因此在PHP中使用它会很

  • 本文向大家介绍如何在JavaScript cookie中存储大数据?,包括了如何在JavaScript cookie中存储大数据?的使用技巧和注意事项,需要的朋友参考一下 要将较大的值存储在JavaScript cookie中,请尝试以下可能性- 创建一个“会话ID”,并将设置保存在数据库中。然后将会话ID存储在cookie中。 存储所选项目的索引。假设所选项目是列表中的前20个项目- 创建一个表

  • 问题内容: 我得到了一些“ 锻炼程序” 内容,这些内容将按顺序显示给用户。下面显示了最简单形式的示例。 通常,这些表至少要包含100行/练习,并且大约有300个表(针对不同标准的不同练习)。我们没有任何前端,可以直接使用 _dbForge Studio_数据库编辑器更新数据库。 以前的开发人员已经设计了表格,以便唯一ID列也可用作序列号。它也构成url的一部分。例如xxx / exercise /