0

我一直在努力将 4 个字符串数组保存到 sharedpreference 中。目前我正在将数组分解为一个用逗号分隔各个部分的字符串。当我转到字符串时,它确实按应有的方式准确地保存了碎片;但是,当我“加载”数据并将其转换回数组时,它会变为空(非空)。我无法确定我应该如何解决这个问题以拉回我的阵列。以下是我的活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.debtlist);

    String[] debtName = new String[10];
    String[] debtAmount = new String[10];
    String[] debtRate = new String[10];
    String[] debtPayment = new String[10];
    int counter = 0;

    SharedPreferences sharedPref= getSharedPreferences("chaosdatasnowball", 0);
    String tempDebtNames = sharedPref.getString("debtNames", "");
    debtName = convertStringToArray(tempDebtNames);

    Bundle extras = getIntent().getExtras();

    int trigger = 0;
    for (int i=0;i<counter || i==counter;i++)
    {
        if (debtName[i] == null && extras != null && trigger == 0)
        {
            debtName[i] = extras.getString("debtName");
            debtAmount[i] = extras.getString("debtAmount");
            debtRate[i] = extras.getString("debtRate");
            debtPayment[i] = extras.getString("debtPayment");
            trigger = 1;
            counter++ ;
        }
    }

    TableLayout tl = (TableLayout) findViewById(R.id.debtListTableView);
    for (int i=0;i<counter || i==counter;i++)
    {
        if (debtName[i] != null)
        {

            TableRow tr = new TableRow(this);
            TextView tv0 = new TextView(this);
            TextView tv1 = new TextView(this);
            TextView tv2 = new TextView(this);
            TextView tv3 = new TextView(this);
            TableRow.LayoutParams trlp = new TableRow.LayoutParams();
            tv0.setLayoutParams(new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.25f));
            tv1.setLayoutParams(new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.25f));
            tv2.setLayoutParams(new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.25f));
            tv3.setLayoutParams(new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.25f));
            trlp.span = 3;
            tr.setLayoutParams(trlp);
            tv0.setText("" + debtName[i]);
            tv1.setText("" + debtAmount[i]);
            tv2.setText("" + debtPayment[i]);
            tv3.setText("" + i);
            tr.addView(tv0);
            tr.addView(tv1);
            tr.addView(tv2);
            tr.addView(tv3);
            tl.addView(tr);
        }
    }

    SharedPreferences.Editor editor= sharedPref.edit();
    String debtNames = convertArrayToString(debtName, counter);
    editor.putString("debtNames", debtNames).commit();

    TextView disp = (TextView) findViewById(R.id.dispAdditionalAmount);
    disp.setText("" + debtNames);  //This is how I confirm that the convertArrayToString is functioning properly


}


public static String convertArrayToString(String[] array, int stop){
    String str = "";
    for (int i = 0;i<stop; i++) {
        str = str+array[i];
        // Do not append comma at the end of last element
        if(i<stop-1){
            str = str+",";
        }
    }
    return str;
}
public static String[] convertStringToArray(String str){
    String[] arr = str.split(",");
    return arr;
}
4

1 回答 1

1

你做:

String tempDebtNames = sharedPref.getString("debtNames", "");
debtName = convertStringToArray(tempDebtNames);

密钥可能"debtNames"不存在。(在这种情况下它返回"")。

想想第一次运行应用程序。密钥将不存在。因此,您应该convertStringToArray仅当!tempDebtNames.equals(""). 如果键不存在,则继续使用空值..

于 2013-11-05T07:35:22.793 回答