序列化
Serializable
| <?xml version="1.0" encoding="utf-8"?> |
| <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" |
| xmlns:app="http://schemas.android.com/apk/res-auto" |
| xmlns:tools="http://schemas.android.com/tools" |
| android:layout_width="match_parent" |
| android:layout_height="match_parent" |
| tools:context=".MainActivity"> |
| |
| <EditText |
| android:id="@+id/edt_name" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="Name" |
| android:inputType="textPersonName" |
| android:minHeight="48dp" |
| app:layout_constraintBottom_toTopOf="@+id/edt_age" |
| app:layout_constraintEnd_toStartOf="@+id/guideline3" |
| app:layout_constraintStart_toStartOf="parent" |
| app:layout_constraintTop_toTopOf="parent" /> |
| |
| <EditText |
| android:id="@+id/edt_math" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="Math" |
| android:inputType="textPersonName" |
| android:minHeight="48dp" |
| app:layout_constraintBottom_toTopOf="@+id/edt_english" |
| app:layout_constraintEnd_toEndOf="@+id/edt_name" |
| app:layout_constraintTop_toBottomOf="@+id/edt_age" /> |
| |
| <EditText |
| android:id="@+id/edt_english" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="English" |
| android:inputType="textPersonName" |
| android:minHeight="48dp" |
| app:layout_constraintBottom_toTopOf="@+id/edt_chinese" |
| app:layout_constraintEnd_toEndOf="@+id/edt_name" |
| app:layout_constraintTop_toBottomOf="@+id/edt_math" /> |
| |
| <EditText |
| android:id="@+id/edt_chinese" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="Chinese" |
| android:inputType="textPersonName" |
| android:minHeight="48dp" |
| app:layout_constraintBottom_toTopOf="@+id/guideline2" |
| app:layout_constraintEnd_toEndOf="@+id/edt_name" |
| app:layout_constraintTop_toBottomOf="@+id/edt_english" /> |
| |
| <EditText |
| android:id="@+id/edt_age" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="Age" |
| android:inputType="textPersonName" |
| android:minHeight="48dp" |
| app:layout_constraintBottom_toTopOf="@+id/edt_math" |
| app:layout_constraintEnd_toEndOf="@+id/edt_name" |
| app:layout_constraintTop_toBottomOf="@+id/edt_name" /> |
| |
| <androidx.constraintlayout.widget.Guideline |
| android:id="@+id/guideline2" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:orientation="horizontal" |
| app:layout_constraintGuide_percent="0.5" /> |
| |
| <androidx.constraintlayout.widget.Guideline |
| android:id="@+id/guideline3" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:orientation="vertical" |
| app:layout_constraintGuide_percent="0.6" /> |
| |
| <TextView |
| android:id="@+id/tv_grade" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:text="TextView" |
| app:layout_constraintBottom_toTopOf="@+id/btn_save" |
| app:layout_constraintEnd_toEndOf="parent" |
| app:layout_constraintStart_toStartOf="@+id/guideline3" |
| app:layout_constraintTop_toTopOf="parent" /> |
| |
| <Button |
| android:id="@+id/btn_save" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:text="save" |
| app:layout_constraintBottom_toTopOf="@+id/btn_load" |
| app:layout_constraintEnd_toEndOf="@+id/tv_grade" |
| app:layout_constraintStart_toStartOf="@+id/tv_grade" |
| app:layout_constraintTop_toBottomOf="@+id/tv_grade" /> |
| |
| <Button |
| android:id="@+id/btn_load" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:text="load" |
| app:layout_constraintBottom_toTopOf="@+id/guideline2" |
| app:layout_constraintStart_toStartOf="@+id/btn_save" |
| app:layout_constraintTop_toBottomOf="@+id/btn_save" /> |
| </androidx.constraintlayout.widget.ConstraintLayout> |
| package com.example.myserialization; |
| |
| import java.io.Serializable; |
| |
| public class Student implements Serializable { |
| |
| private static final long serialVersionUID = -7091411988309226703L; |
| private String name; |
| |
| private int age; |
| private Score score; |
| |
| public Student(String name, int age, Score score) { |
| this.name = name; |
| this.age = age; |
| this.score = score; |
| } |
| |
| public String getName() { |
| return name; |
| } |
| |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| public int getAge() { |
| return age; |
| } |
| |
| public void setAge(int age) { |
| this.age = age; |
| } |
| |
| public Score getScore() { |
| return score; |
| } |
| |
| public void setScore(Score score) { |
| this.score = score; |
| } |
| } |
| |
| class Score implements Serializable{ |
| private static final long serialVersionUID = -3142893894209501048L; |
| private int Math; |
| private int English; |
| private int Chinese; |
| private String grade; |
| |
| public Score(int math, int english, int chinese) { |
| Math = math; |
| English = english; |
| Chinese = chinese; |
| if (math >= 90 && english >= 90 && chinese >= 90) { |
| |
| this.grade = "A"; |
| } else if (math >= 80 && english >= 80 && chinese >= 80) { |
| this.grade = "B"; |
| } else { |
| this.grade = "C"; |
| } |
| } |
| |
| public int getMath() { |
| return Math; |
| } |
| |
| public void setMath(int math) { |
| Math = math; |
| } |
| |
| public int getEnglish() { |
| return English; |
| } |
| |
| public void setEnglish(int english) { |
| English = english; |
| } |
| |
| public int getChinese() { |
| return Chinese; |
| } |
| |
| public void setChinese(int chinese) { |
| Chinese = chinese; |
| } |
| |
| public String getGrade() { |
| return grade; |
| } |
| |
| public void setGrade(String grade) { |
| this.grade = grade; |
| } |
| } |
| |
| package com.example.myserialization; |
| |
| import androidx.appcompat.app.AppCompatActivity; |
| |
| import android.os.Bundle; |
| import android.view.View; |
| import android.widget.Button; |
| import android.widget.EditText; |
| import android.widget.TextView; |
| import android.widget.Toast; |
| |
| import java.io.IOException; |
| import java.io.ObjectInput; |
| import java.io.ObjectInputStream; |
| import java.io.ObjectOutput; |
| import java.io.ObjectOutputStream; |
| |
| public class MainActivity extends AppCompatActivity { |
| private EditText edt_name, edt_age, edt_math, edt_english, edt_chinese; |
| private Button btn_save, btn_load; |
| private TextView tv_grade; |
| public static final String FILE_NAME = "myfile.data"; |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_main); |
| |
| edt_name = findViewById(R.id.edt_name); |
| edt_age = findViewById(R.id.edt_age); |
| edt_math = findViewById(R.id.edt_math); |
| edt_english = findViewById(R.id.edt_english); |
| edt_chinese = findViewById(R.id.edt_chinese); |
| btn_save = findViewById(R.id.btn_save); |
| btn_load = findViewById(R.id.btn_load); |
| tv_grade = findViewById(R.id.tv_grade); |
| |
| btn_save.setOnClickListener(new View.OnClickListener() { |
| @Override |
| public void onClick(View view) { |
| int math = Integer.parseInt(edt_math.getText().toString()); |
| int english = Integer.parseInt(edt_english.getText().toString()); |
| int chinese = Integer.parseInt(edt_chinese.getText().toString()); |
| Score score = new Score(math, english, chinese); |
| String name = edt_name.getText().toString(); |
| int age = Integer.parseInt(edt_age.getText().toString()); |
| Student student = new Student(name, age, score); |
| |
| try { |
| |
| ObjectOutputStream objectOutputStream = new ObjectOutputStream(openFileOutput(FILE_NAME, MODE_PRIVATE)); |
| objectOutputStream.writeObject(student); |
| objectOutputStream.flush(); |
| objectOutputStream.close(); |
| Toast.makeText(MainActivity.this, "存入成功", Toast.LENGTH_SHORT).show(); |
| edt_name.getText().clear(); |
| edt_age.getText().clear(); |
| edt_english.getText().clear(); |
| edt_math.getText().clear(); |
| edt_chinese.getText().clear(); |
| tv_grade.setText("-"); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| } |
| }); |
| |
| btn_load.setOnClickListener(new View.OnClickListener() { |
| @Override |
| public void onClick(View view) { |
| try { |
| ObjectInputStream objectInputStream = new ObjectInputStream(openFileInput(FILE_NAME)); |
| Student student = (Student) objectInputStream.readObject(); |
| edt_name.setText(String.valueOf(student.getName())); |
| edt_age.setText(String.valueOf(student.getAge())); |
| edt_math.setText(String.valueOf(student.getScore().getMath())); |
| edt_english.setText(String.valueOf(student.getScore().getEnglish())); |
| edt_chinese.setText(String.valueOf(student.getScore().getChinese())); |
| tv_grade.setText(String.valueOf(student.getScore().getGrade())); |
| } catch (IOException | ClassNotFoundException e) { |
| e.printStackTrace(); |
| } |
| } |
| }); |
| |
| } |
| } |
Parcelable
| <?xml version="1.0" encoding="utf-8"?> |
| <layout xmlns:android="http://schemas.android.com/apk/res/android" |
| xmlns:app="http://schemas.android.com/apk/res-auto" |
| xmlns:tools="http://schemas.android.com/tools"> |
| |
| <data> |
| |
| </data> |
| |
| <androidx.constraintlayout.widget.ConstraintLayout |
| android:layout_width="match_parent" |
| android:layout_height="match_parent" |
| tools:context=".MainActivity"> |
| |
| <EditText |
| android:id="@+id/edt_name" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="Name" |
| android:inputType="textPersonName" |
| app:layout_constraintBottom_toTopOf="@+id/edt_age" |
| app:layout_constraintEnd_toEndOf="@+id/edt_age" |
| app:layout_constraintStart_toStartOf="@+id/edt_age" |
| app:layout_constraintTop_toTopOf="parent" /> |
| |
| <EditText |
| android:id="@+id/edt_age" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="Age" |
| android:inputType="textPersonName" |
| app:layout_constraintBottom_toTopOf="@+id/edt_math" |
| app:layout_constraintEnd_toEndOf="@+id/edt_math" |
| app:layout_constraintStart_toStartOf="@+id/edt_math" |
| app:layout_constraintTop_toBottomOf="@+id/edt_name" /> |
| |
| <EditText |
| android:id="@+id/edt_math" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="Math" |
| android:inputType="textPersonName" |
| app:layout_constraintBottom_toTopOf="@+id/edt_english" |
| app:layout_constraintEnd_toEndOf="@+id/edt_english" |
| app:layout_constraintStart_toStartOf="@+id/edt_english" |
| app:layout_constraintTop_toBottomOf="@+id/edt_age" /> |
| |
| <EditText |
| android:id="@+id/edt_english" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:ems="10" |
| android:hint="English" |
| android:inputType="textPersonName" |
| app:layout_constraintBottom_toTopOf="@+id/button" |
| app:layout_constraintEnd_toEndOf="@+id/button" |
| app:layout_constraintStart_toStartOf="@+id/button" |
| app:layout_constraintTop_toBottomOf="@+id/edt_math" /> |
| |
| <Button |
| android:id="@+id/button" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:text="Button" |
| app:layout_constraintBottom_toBottomOf="parent" |
| app:layout_constraintEnd_toEndOf="parent" |
| app:layout_constraintStart_toStartOf="parent" |
| app:layout_constraintTop_toBottomOf="@+id/edt_english" /> |
| |
| </androidx.constraintlayout.widget.ConstraintLayout> |
| </layout> |
| <?xml version="1.0" encoding="utf-8"?> |
| <layout xmlns:android="http://schemas.android.com/apk/res/android" |
| xmlns:app="http://schemas.android.com/apk/res-auto" |
| xmlns:tools="http://schemas.android.com/tools"> |
| |
| <data> |
| |
| </data> |
| |
| <androidx.constraintlayout.widget.ConstraintLayout |
| android:layout_width="match_parent" |
| android:layout_height="match_parent" |
| tools:context=".MainActivity2"> |
| |
| <TextView |
| android:id="@+id/tv_name" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:text="Name" |
| android:textSize="34sp" |
| app:layout_constraintBottom_toTopOf="@+id/tv_age" |
| app:layout_constraintEnd_toEndOf="@+id/tv_age" |
| app:layout_constraintStart_toStartOf="@+id/tv_age" |
| app:layout_constraintTop_toTopOf="parent" /> |
| |
| <TextView |
| android:id="@+id/tv_age" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:text="Age" |
| android:textSize="34sp" |
| app:layout_constraintBottom_toTopOf="@+id/tv_math" |
| app:layout_constraintEnd_toEndOf="@+id/tv_math" |
| app:layout_constraintStart_toStartOf="@+id/tv_math" |
| app:layout_constraintTop_toBottomOf="@+id/tv_name" /> |
| |
| <TextView |
| android:id="@+id/tv_math" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:text="Math" |
| android:textSize="34sp" |
| app:layout_constraintBottom_toTopOf="@+id/tv_english" |
| app:layout_constraintEnd_toEndOf="@+id/tv_english" |
| app:layout_constraintStart_toStartOf="@+id/tv_english" |
| app:layout_constraintTop_toBottomOf="@+id/tv_age" /> |
| |
| <TextView |
| android:id="@+id/tv_english" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:text="English" |
| android:textSize="34sp" |
| app:layout_constraintBottom_toBottomOf="parent" |
| app:layout_constraintEnd_toEndOf="parent" |
| app:layout_constraintStart_toStartOf="parent" |
| app:layout_constraintTop_toBottomOf="@+id/tv_math" /> |
| </androidx.constraintlayout.widget.ConstraintLayout> |
| </layout> |
| <activity |
| android:name=".MainActivity2" |
| android:process=":process2" |
| android:exported="true" /> |
| package com.example.myserialization2; |
| |
| import android.os.Parcel; |
| import android.os.Parcelable; |
| |
| public class Student implements Parcelable { |
| private String name; |
| private int age; |
| private Score score; |
| |
| public Student(String name, int age, Score score) { |
| this.name = name; |
| this.age = age; |
| this.score = score; |
| } |
| |
| protected Student(Parcel in) { |
| name = in.readString(); |
| age = in.readInt(); |
| score = in.readParcelable(Score.class.getClassLoader()); |
| } |
| |
| @Override |
| public void writeToParcel(Parcel dest, int flags) { |
| dest.writeString(name); |
| dest.writeInt(age); |
| dest.writeParcelable(score, flags); |
| } |
| |
| @Override |
| public int describeContents() { |
| return 0; |
| } |
| |
| public static final Creator<Student> CREATOR = new Creator<Student>() { |
| @Override |
| public Student createFromParcel(Parcel in) { |
| return new Student(in); |
| } |
| |
| @Override |
| public Student[] newArray(int size) { |
| return new Student[size]; |
| } |
| }; |
| |
| public String getName() { |
| return name; |
| } |
| |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| public int getAge() { |
| return age; |
| } |
| |
| public void setAge(int age) { |
| this.age = age; |
| } |
| |
| public Score getScore() { |
| return score; |
| } |
| |
| public void setScore(Score score) { |
| this.score = score; |
| } |
| } |
| |
| class Score implements Parcelable { |
| private static final long serialVersionUID = -3142893894209501048L; |
| private int Math; |
| private int English; |
| |
| |
| public Score(int math, int english) { |
| Math = math; |
| English = english; |
| } |
| |
| protected Score(Parcel in) { |
| Math = in.readInt(); |
| English = in.readInt(); |
| } |
| |
| @Override |
| public void writeToParcel(Parcel dest, int flags) { |
| dest.writeInt(Math); |
| dest.writeInt(English); |
| } |
| |
| @Override |
| public int describeContents() { |
| return 0; |
| } |
| |
| public static final Creator<Score> CREATOR = new Creator<Score>() { |
| @Override |
| public Score createFromParcel(Parcel in) { |
| return new Score(in); |
| } |
| |
| @Override |
| public Score[] newArray(int size) { |
| return new Score[size]; |
| } |
| }; |
| |
| public int getMath() { |
| return Math; |
| } |
| |
| public void setMath(int math) { |
| Math = math; |
| } |
| |
| public int getEnglish() { |
| return English; |
| } |
| |
| public void setEnglish(int english) { |
| English = english; |
| } |
| |
| } |
| package com.example.myserialization2; |
| |
| import androidx.appcompat.app.AppCompatActivity; |
| import androidx.databinding.DataBindingUtil; |
| |
| import android.content.Intent; |
| import android.os.Bundle; |
| import android.util.Log; |
| import android.view.View; |
| |
| import com.example.myserialization2.databinding.ActivityMainBinding; |
| |
| public class MainActivity extends AppCompatActivity { |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_main); |
| |
| |
| |
| ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); |
| |
| binding.button.setOnClickListener(new View.OnClickListener() { |
| @Override |
| public void onClick(View view) { |
| String name = binding.edtName.getText().toString(); |
| int age = Integer.valueOf(binding.edtAge.getText().toString()); |
| int math = Integer.valueOf(binding.edtMath.getText().toString()); |
| int english = Integer.valueOf(binding.edtEnglish.getText().toString()); |
| Student student = new Student(name, age, new Score(math, english)); |
| |
| Intent intent = new Intent(MainActivity.this, MainActivity2.class); |
| |
| Bundle bundle = new Bundle(); |
| bundle.putParcelable("student", student); |
| intent.putExtra("data", bundle); |
| startActivity(intent); |
| } |
| }); |
| } |
| } |
| package com.example.myserialization2; |
| |
| import androidx.appcompat.app.AppCompatActivity; |
| import androidx.databinding.DataBindingUtil; |
| |
| import android.content.Intent; |
| import android.os.Bundle; |
| |
| import com.example.myserialization2.databinding.ActivityMain2Binding; |
| |
| public class MainActivity2 extends AppCompatActivity { |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| ActivityMain2Binding binding = DataBindingUtil.setContentView(this, R.layout.activity_main2); |
| |
| Intent intent = getIntent(); |
| Bundle bundle = intent.getBundleExtra("data"); |
| Student student = bundle.getParcelable("student"); |
| binding.tvName.setText(student.getName()); |
| binding.tvAge.setText(String.valueOf(student.getAge())); |
| binding.tvMath.setText(String.valueOf(student.getScore().getMath())); |
| binding.tvEnglish.setText(String.valueOf(student.getScore().getEnglish())); |
| } |
| } |
Gson
| implementation 'com.google.code.gson:gson:2.8.8' |
- 属性前加@SerializedName("student_name")自定义序列化时的名称
| Gson gson = new Gson(); |
| |
| |
| Student student1 = new Student("Tom", 20, new Score(100, 99, 98)); |
| String jsonStr1 = gson.toJson(student1); |
| String jsonStr2 = "{\"age\":22,\"name\":\"Lili\",\"score\":{\"Chinese\":80,\"English\":97,\"Math\":100}}"; |
| Student student2 = gson.fromJson(jsonStr2, Student.class); |
| |
| |
| List<Student> list = new ArrayList<>(); |
| list.add(student1); |
| list.add(student2); |
| String jsonList = gson.toJson(list); |
| String jsonList2 = "[{\"age\":20,\"name\":\"Tom\",\"score\":{\"Chinese\":98,\"English\":99,\"Math\":100}},{\"age\":22,\"name\":\"Lili\",\"score\":{\"Chinese\":80,\"English\":97,\"Math\":100}}]"; |
| Type typeStudents = new TypeToken<List<Student>>(){}.getType(); |
| list = gson.fromJson(jsonList2, typeStudents); |
| |
| |
| Student[] students = {student1, student2}; |
| String jsonStudents1 = gson.toJson(students); |
| String jsonStudents2 = "[{\"age\":20,\"name\":\"Tom\",\"score\":{\"Chinese\":98,\"English\":99,\"Math\":100}},{\"age\":22,\"name\":\"Lili\",\"score\":{\"Chinese\":80,\"English\":97,\"Math\":100}}]"; |
| Student[] students2 = gson.fromJson(jsonStudents2, Student[].class); |
本文作者:n1ce2cv
本文链接:https://www.cnblogs.com/sprinining/p/15260999.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步