Java 共享首选项仅适用于第一次应用程序重启。第二次重新启动应用程序时,不会保留卡片视图标题

Java 共享首选项仅适用于第一次应用程序重启。第二次重新启动应用程序时,不会保留卡片视图标题,java,android,sharedpreferences,Java,Android,Sharedpreferences,我已经创建了一个应用程序,它可以添加卡片,并在从用户输入姓名后在每张卡片上设置一个标题。为了在应用程序重启期间保留卡片和标题,我使用SharedReferences并将单个卡片标题保存在一个数组中。问题是在第一次应用程序重启后,卡片标题会保留,但在进一步应用程序重启后,卡片标题不会保留。虽然卡的数量仍然保留 public class MainActivity extends AppCompatActivity { private CardView cardview;

我已经创建了一个应用程序,它可以添加卡片,并在从用户输入姓名后在每张卡片上设置一个标题。为了在应用程序重启期间保留卡片和标题,我使用SharedReferences并将单个卡片标题保存在一个数组中。问题是在第一次应用程序重启后,卡片标题会保留,但在进一步应用程序重启后,卡片标题不会保留。虽然卡的数量仍然保留

    public class MainActivity extends AppCompatActivity { 

        private CardView cardview;
        private CardView cardview2;
        private LinearLayout.LayoutParams layoutparams1;
        private LinearLayout layout;
        public SharedPreferences mSettings;
        int mCount;
        int i=0,j=0;
        public TextView tv1;
        public TextView tv4;
        public TextView tv3;
        String name;
        String names[] = new String[10];
        String key[] = {"A","B","C","D","F","G","H"};

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mCount=0;

            Button b1 = findViewById(R.id.button);
            layout=findViewById(R.id.view);
            tv1 = findViewById(R.id.textView);

            b1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    names[mCount] = tv1.getText().toString().trim();
                    mCount++;
                    saveName();
                }
            });
        }

       private void saveName()    //Cardview-1 function to 
        {
            cardview = new CardView(getApplicationContext());
            layoutparams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            layoutparams1.setMargins(18, 30, 18, 0);
            cardview.setLayoutParams(layoutparams1);
            cardview.setCardBackgroundColor(Color.WHITE);
            cardview.setMinimumHeight(400);

            tv3 = new TextView(getApplicationContext());
            tv3.setText(tv1.getText().toString().trim());

            cardview.setRadius(30);
            cardview.addView(tv3);
            layout.addView(cardview);
        }

        private void saveName2()  //Cardview 2 function
        {
            cardview2 = new CardView(getApplicationContext());
            layoutparams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            layoutparams1.setMargins(18, 30, 18, 0);
            cardview2.setLayoutParams(layoutparams1);
            cardview2.setCardBackgroundColor(Color.WHITE);
            cardview2.setMinimumHeight(400);
            tv4 = new TextView(getApplicationContext());

            mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
            name = mSettings.getString(key[j],"");
            tv4.setText(name);
            j++;

            cardview2.setRadius(30);
            cardview2.addView(tv4);
            layout.addView(cardview2);
        }

        @Override
        public void onPause() {
            super.onPause();
            mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = mSettings.edit();
            editor.putInt("COUNT_CARDS", mCount);
            for(int i=0; i<mCount; i++)
            editor.putString(key[i],names[i]);
            editor.commit();
        }

        @Override
        public void onResume() {
            super.onResume();
            mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
            if(mSettings.contains("COUNT_CARDS"))
            {
                mCount = mSettings.getInt("COUNT_CARDS", 0);
                for (int i=0; i<mCount; i++)
                    saveName2();
            }
        }
    }
公共类MainActivity扩展了AppCompatActivity{
私人卡视图卡视图;
私人卡查看卡查看2;
private LinearLayout.LayoutParams layoutparams1;
私人线路布局;
公共共享参考设置;
国际计数;
int i=0,j=0;
公共文本视图tv1;
公共文本视图tv4;
公共文本视图tv3;
字符串名;
字符串名称[]=新字符串[10];
字符串键[]={“A”、“B”、“C”、“D”、“F”、“G”、“H”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCount=0;
按钮b1=findViewById(R.id.按钮);
布局=findViewById(R.id.view);
tv1=findViewById(R.id.textView);
b1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
names[mCount]=tv1.getText().toString().trim();
mCount++;
saveName();
}
});
}
私有void saveName()//Cardview-1函数
{
cardview=新的cardview(getApplicationContext());
layoutparams1=新建LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容);
layoutparams1.setMargins(18,30,18,0);
设置LayoutParams(layoutparams1);
cardview.setCardBackgroundColor(颜色:白色);
cardview.setMinimumHeight(400);
tv3=新文本视图(getApplicationContext());
tv3.setText(tv1.getText().toString().trim());
cardview.setRadius(30);
cardwiew.addView(tv3);
布局。添加视图(cardview);
}
私有void saveName2()//cardwiew 2函数
{
cardview2=新的CardView(getApplicationContext());
layoutparams1=新建LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容);
layoutparams1.setMargins(18,30,18,0);
cardview2.setLayoutParams(layoutparams1);
cardview2.setCardBackgroundColor(颜色:白色);
cardview2.设置最小高度(400);
tv4=新文本视图(getApplicationContext());
mSettings=getSharedReferences(“应用程序首选项”,Context.MODE\u PRIVATE);
name=mSettings.getString(键[j],“”);
tv4.setText(名称);
j++;
cardview2.设置半径(30);
cardview2.addView(tv4);
布局。添加视图(cardview2);
}
@凌驾
公共无效暂停(){
super.onPause();
mSettings=getSharedReferences(“应用程序首选项”,Context.MODE\u PRIVATE);
SharedReferences.Editor=mSettings.edit();
编辑:putInt(“计数卡”,mCount);

对于(int i=0;i无需在onPause()方法中存储每一张卡。我们只会在sharedPref中写入新卡,因为sharedPref中已经存在上一张卡。因此,当您尝试在循环中保存上一张卡时,出现了一个问题。(写入空白值)

public类MainActivity扩展了AppCompatActivity{
私人卡视图卡视图;
私人卡查看卡查看2;
private LinearLayout.LayoutParams layoutparams1;
私人线路布局;
公共共享参考设置;
国际计数;
int i=0,j=0;
公共文本视图tv1;
公共文本视图tv4;
公共文本视图tv3;
字符串名;
字符串名称[]=新字符串[10];
字符串键[]={“A”、“B”、“C”、“D”、“F”、“G”、“H”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCount=0;
按钮b1=findViewById(R.id.按钮);
布局=findViewById(R.id.view);
tv1=findViewById(R.id.textView);
b1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
names[mCount]=tv1.getText().toString().trim();
mCount++;
saveName();
}
});
}
私有void saveName()//Cardview-1函数
{
cardview=新的cardview(getApplicationContext());
layoutparams1=新建LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容);
layoutparams1.setMargins(18,30,18,0);
设置LayoutParams(layoutparams1);
cardview.setCardBackgroundColor(颜色:白色);
cardview.setMinimumHeight(400);
tv3=新文本视图(getApplicationContext());
tv3.setText(tv1.getText().toString().trim());
cardview.setRadius(30);
cardwiew.addView(tv3);
布局。添加视图(cardview);
saveInPref();
}
私有void saveInPref(){
mSettings=getSharedReferences(“应用程序首选项”,Context.MODE\u PRIVATE);
SharedReferences.Editor=mSettings.edit();
编辑:putInt(“计数卡”,mCount);
编辑器.putString(键[mCount-1],名称[mCount-1]);
editor.apply();
}
私有void saveName2()//cardwiew 2函数
{
cardview2=新的CardView(getApplicationContext());
    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:id="@+id/layout"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:id="@+id/button"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/view"
        android:orientation="vertical"
        android:layout_marginTop="200dp"
        android:background="@color/cardview_dark_background">

    </LinearLayout>

    <EditText
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="40dp" />

</RelativeLayout>
public class MainActivity extends AppCompatActivity {

    private CardView cardview;
    private CardView cardview2;
    private LinearLayout.LayoutParams layoutparams1;
    private LinearLayout layout;
    public SharedPreferences mSettings;
    int mCount;
    int i=0,j=0;
    public TextView tv1;
    public TextView tv4;
    public TextView tv3;
    String name;
    String names[] = new String[10];
    String key[] = {"A","B","C","D","F","G","H"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCount=0;

        Button b1 = findViewById(R.id.button);
        layout=findViewById(R.id.view);
        tv1 = findViewById(R.id.textView);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                names[mCount] = tv1.getText().toString().trim();
                mCount++;
                saveName();
            }
        });
    }

    private void saveName()    //Cardview-1 function to
    {
        cardview = new CardView(getApplicationContext());
        layoutparams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        layoutparams1.setMargins(18, 30, 18, 0);
        cardview.setLayoutParams(layoutparams1);
        cardview.setCardBackgroundColor(Color.WHITE);
        cardview.setMinimumHeight(400);

        tv3 = new TextView(getApplicationContext());
        tv3.setText(tv1.getText().toString().trim());

        cardview.setRadius(30);
        cardview.addView(tv3);
        layout.addView(cardview);

        saveInPref();
    }

    private void saveInPref() {
        mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = mSettings.edit();
        editor.putInt("COUNT_CARDS", mCount);
        editor.putString(key[mCount-1],names[mCount-1]);
        editor.apply();
    }

    private void saveName2()  //Cardview 2 function
    {
        cardview2 = new CardView(getApplicationContext());
        layoutparams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        layoutparams1.setMargins(18, 30, 18, 0);
        cardview2.setLayoutParams(layoutparams1);
        cardview2.setCardBackgroundColor(Color.WHITE);
        cardview2.setMinimumHeight(400);
        tv4 = new TextView(getApplicationContext());

        mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
        name = mSettings.getString(key[j],"");
        tv4.setText(name);
        j++;

        cardview2.setRadius(30);
        cardview2.addView(tv4);
        layout.addView(cardview2);
    }


    @Override
    public void onResume() {
        super.onResume();
        mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
        if(mSettings.contains("COUNT_CARDS"))
        {
            mCount = mSettings.getInt("COUNT_CARDS", 0);
            for (int i=0; i<mCount; i++)
                saveName2();
        }
    }
}