Desenvolvimento Android, na implementação de objetos de armazenamento persistente SharedPreferences

Androd fornece três métodos para armazenamento persistente de dados, ou seja, armazenamento de arquivos, armazenamento de SharedPreferences e armazenamento de banco de dados.

1. O armazenamento de arquivos é realizado combinando openfileoutput () e openfileinput com fluxo Java, que é conveniente e rápido, e é salvo localmente na forma de arquivos. No entanto, os arquivos de texto só podem armazenar dados de um único tipo de String, o que não é adequado para outros tipos.
2. Armazenamento do banco de dados, através do acesso do servidor ao banco de dados, o armazenamento dos dados torna-se seguro, estável e durável, e os dados centrais podem ser obtidos através da rede a qualquer momento. No entanto, o armazenamento de dados requer operações como construção de banco de dados, construção de tabela e implementação de instrução SQL, que são relativamente problemáticas e adequadas para armazenar dados complexos, importantes e compartilhados. No entanto, um grande número de estruturas de código aberto compensa essa lacuna.
3. SharedPreferences obtém o objeto sharedPreferences, instancia o editor e salva os dados na forma de pares chave-valor por meio de editor.putint (chave, dados), editor.putString (chave, Valor), etc. Leia os dados no modo sp.get (chave). O método específico é o seguinte:

//建立sp的编辑器, 第一个参数是自定义文件名,第二个参数默认
 SharedPreferences.Editor editor = getSharedPreferences(
                ConstantString.sharePreferencesName,MODE_PRIVATE).edit();
 String str = "lallalallallallal";
 editor.putString(key, str);
 editor.apply();  

Leia os dados do objeto sharedPreferences

//获得指定SP名文件的sharedpeferences对象
 SharedPreferences sp = getSharedPreferences(
 ConstantString.sharePreferencesName,MODE_PRIVATE);
 String getgson = sp.getString(
 key,"failtoGetDataValue");

É muito simples? Em seguida, implemente a implementação de armazenamento de dados para o tipo de objeto.
. . . . . .
. . . . .
. . . .
. . .
. .
.
Lamento informar que sharepreference não fornece armazenamento de dados de tipo de objeto, mas não se preocupe, podemos converter os dados de tipo de objeto em armazenamento de caractere e, em seguida, analisar o caractere em um objeto para resolver perfeitamente este problema. o que é aquilo?
Isso mesmo, é json.
Armazenamos o objeto na forma json e, em seguida, analisamos o json armazenado em um objeto para atingir o objetivo.
A operação específica é a seguinte:
primeiro, criamos uma FirstActivity, e o xml relacionado,
ele tem apenas uma função, que é pular para a segunda SecondActivity; portanto, não irei escrever o código de FirstActivity.

activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".EighthActivity">
    <EditText
        android:id="@+id/usename"
        android:hint="账号"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/password"
        android:hint="密码"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/recover_data"
        android:text="数据复现"
        android:onClick="recoverDataBySP"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Insira a descrição da imagem aqui
Quando inserirmos a conta e a senha, pressione o botão de retorno para retornar à FirstActivity, então a SecondActivity será destruída e os dados serão reciclados. Neste momento, inicie a SecondActivity novamente em FirstActivity, a senha da conta está naturalmente vazia, clique nos dados botão de reprodução para realizar a conta A função de recarregar a senha. Isso pode ser usado para "lembrar a senha da conta de login do aplicativo, fazer login no aplicativo uma vez e fazer login na próxima vez que você fizer login automaticamente sem inserir a senha"
SecondActivity.java

public class SecondActivity extends BaseActivity {
    
    
     private EditText usename,password;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        init();
    }
    public void init(){
    
    
        usename = (EditText)findViewById(R.id.usename);
        password = (EditText)findViewById(R.id.password);

    }
    //建立数据保存方法
    public void save(UserBean userBean){
    
    
        //建立sp的编辑器, 第一个参数是自定义文件名,第二个参数默认
        SharedPreferences.Editor editor = getSharedPreferences(
                ConstantString.sharePreferencesName,MODE_PRIVATE).edit();
        //把对象转化为gson,因为share preferences没有提供存储对象的方法,所以要转化gson
        Gson gson = new Gson();
        String changeObjecttoGson = gson.toJson(userBean);
        editor.putString(ConstantString.userBean,changeObjecttoGson);//key
        editor.apply();
    }

    @Override
    protected void onDestroy() {
    
    
        super.onDestroy();
        String getusename = usename.getText().toString();
        String getpassword = password.getText().toString();
        UserBean userBean = new UserBean(getusename,getpassword);
        save(userBean);
    }

    //恢复数据,将gson转化回 user Bean对象
    public void recoverDataBySP(View view){
    
    
        switch (view.getId()){
    
    
            case R.id.recover_data:
                //获得指定SP名文件的sharedpeferences对象
                SharedPreferences sp = getSharedPreferences(ConstantString.sharePreferencesName,MODE_PRIVATE);
                //获得json
                String getgson = sp.getString(ConstantString.userBean,"failureGetJson");
                //将json转化为指定对象
                Gson gson = new Gson();
                Type type = new TypeToken<UserBean>(){
    
    }.getType();//获得UserBean对象类型
                UserBean userBean = gson.fromJson(getgson,type);
                usename.setText(userBean.getUsename());
                password.setText(userBean.getPassword());
            default:
                break;
        }
    }
}

UserBean.java

public class UserBean implements Serializable {
    
    
    private String usename;
    private String password;
    public UserBean(String c_usename,String c_password){
    
    
        this.usename = c_usename;
        this.password = c_password;
    }

    //Ctrl + Shift T  打开 try   catch  finally


    // Alt +  Ins
    public String getUsename() {
    
    
        return usename;
    }

    public void setUsename(String usename) {
    
    
        this.usename = usename;
    }

    public String getPassword() {
    
    
        return password;
    }

    public void setPassword(String password) {
    
    
        this.password = password;
    }
}

Acho que você gosta

Origin blog.csdn.net/qq_41904106/article/details/108820182
Recomendado
Clasificación