运行效果:
文件结构:
MainActivity
package cn.edu.sicnu.persondemo;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
ArrayList<Person> persons;
ArrayAdapter<Person> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
persons = new ArrayList<>();
restore();
ListView listView = findViewById(R.id.listView);
arrayAdapter = new ArrayAdapter<Person>(this,android.R.layout.simple_list_item_1,persons);
listView.setAdapter(arrayAdapter);
//
// if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
// ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},0);
// }
}
public void add(View v){
EditText editText_name = findViewById(R.id.editText_name);
EditText editText_age = findViewById(R.id.editText_age);
Person person = new Person(editText_name.getText().toString(),Integer.parseInt(editText_age.getText().toString()));
persons.add(person);
arrayAdapter.notifyDataSetChanged();
}
@Override
protected void onPause() {
super.onPause();
save();
}
//外部存储
public void save(){
try {
// File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
Log.d(TAG, "save: "+file.getAbsolutePath());
FileOutputStream fileOutputStream = new FileOutputStream(file.getAbsolutePath()+"/persons");
// FileOutputStream fileOutputStream = openFileOutput("persons",MODE_PRIVATE);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(persons);
objectOutputStream.close();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void restore(){
try {
// File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
FileInputStream fileInputStream = new FileInputStream(file.getAbsolutePath()+"/persons");
// FileInputStream fileInputStream = openFileInput("persons");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
persons = (ArrayList<Person>) objectInputStream.readObject();
fileInputStream.close();
objectInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// public void save(){
// try {
// FileOutputStream fileOutputStream = openFileOutput("persons",MODE_PRIVATE);
// ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
//
// objectOutputStream.writeObject(persons);
//
// objectOutputStream.close();
// fileOutputStream.close();
//
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
//
// public void restore(){
// try {
// FileInputStream fileInputStream = openFileInput("persons");
// ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
//
// persons = (ArrayList<Person>) objectInputStream.readObject();
//
// fileInputStream.close();
// objectInputStream.close();
//
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// }
// }
}
Person
package cn.edu.sicnu.persondemo;
import java.io.Serializable;
/**
* Created by liguiyang on 2018/4/24.
*/
public class Person implements Serializable {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="cn.edu.sicnu.persondemo.MainActivity"
tools:layout_editor_absoluteY="81dp">
<EditText
android:id="@+id/editText_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:layout_marginTop="5dp"
android:ems="10"
android:hint="Input your name?"
android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/editText_age"
app:layout_constraintEnd_toStartOf="@+id/button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText_age"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="2dp"
android:ems="10"
android:hint="Input your age?"
android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/listView"
app:layout_constraintEnd_toStartOf="@+id/button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText_name" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="55dp"
android:layout_marginEnd="1dp"
android:layout_marginTop="5dp"
android:onClick="add"
android:text="add"
app:layout_constraintBottom_toTopOf="@+id/listView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/editText_age"
app:layout_constraintTop_toTopOf="parent" />
<ListView
android:id="@+id/listView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="16dp"
android:layout_marginEnd="7dp"
android:layout_marginStart="7dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
</android.support.constraint.ConstraintLayout>