📜  在 Android 中使用 GSON 库对 JSON 进行序列化和反序列化

📅  最后修改于: 2022-05-13 01:54:41.794000             🧑  作者: Mango

在 Android 中使用 GSON 库对 JSON 进行序列化和反序列化

当我们需要将一些数据从一个活动发送到另一个活动时,我们可以使用带有putExtra()函数的意图。但是我们 putExtra 支持原始数据类型。所以如果我们需要传递并且用户定义了对象,我们需要先序列化它,然后发送到目的地。在接收数据时,我们需要对其进行反序列化。我们将使用 Gson 库将对象序列化和反序列化为 JSON。

分步实施

第 1 步:使用 kotlin 在 android studio 中创建一个新项目。

步骤 2:创建用户定义的数据类

Kotlin
package com.ayush.serialize_deserialize
  
data class StudentInfo(val id: Int, val Name :String, val RollNo : Int)


XML


    
    
    


Kotlin
package com.ayush.serialize_deserialize
  
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.gson.Gson
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        val stu01 = StudentInfo(1,"AMAN",10)
        val json = Gson().toJson(stu01)
        val intent = Intent(this,SecondActivity::class.java)
        intent.putExtra("data",json)
        startActivity(intent)
    }
}


Kotlin
package com.ayush.serialize_deserialize
  
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import com.google.gson.Gson
  
class SecondActivity : AppCompatActivity() {
    lateinit var data : StudentInfo
    lateinit var tvId : TextView
    lateinit var tvName : TextView
    lateinit var tvRoll : TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
  
        tvId = findViewById(R.id.tvId)
        tvName = findViewById(R.id.tvName)
        tvRoll= findViewById(R.id.tvRoll)
  
       val json = intent.getStringExtra("data")
        data = Gson().fromJson(json,StudentInfo::class.java)
  
        tvId.text = data.id.toString()
        tvName.text = data.Name
        tvRoll.text = data.RollNo.toString()
    }
}


第 3 步:创建一个新活动,我们将在其中发送数据

XML



    
    
    

第 4 步:现在我们将创建一个用户定义类的对象,并使用 Gson().toJson()函数将其转换为 JSON 数据并将其发送到意图。

科特林

package com.ayush.serialize_deserialize
  
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.gson.Gson
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        val stu01 = StudentInfo(1,"AMAN",10)
        val json = Gson().toJson(stu01)
        val intent = Intent(this,SecondActivity::class.java)
        intent.putExtra("data",json)
        startActivity(intent)
    }
}

第 5 步:我们将使用 getExtra() 方法从意图中提取数据,并使用 Gson().fromJson() 对其进行反序列化。

科特林

package com.ayush.serialize_deserialize
  
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import com.google.gson.Gson
  
class SecondActivity : AppCompatActivity() {
    lateinit var data : StudentInfo
    lateinit var tvId : TextView
    lateinit var tvName : TextView
    lateinit var tvRoll : TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
  
        tvId = findViewById(R.id.tvId)
        tvName = findViewById(R.id.tvName)
        tvRoll= findViewById(R.id.tvRoll)
  
       val json = intent.getStringExtra("data")
        data = Gson().fromJson(json,StudentInfo::class.java)
  
        tvId.text = data.id.toString()
        tvName.text = data.Name
        tvRoll.text = data.RollNo.toString()
    }
}

因此,我们的应用程序已准备就绪,我们可以看到输出。

输出:

输出