0

我正在尝试获取我的 4 个字符串数组并将它们转换为由“,”分隔的单个字符串。调试时似乎很容易保存信息;但是,当我尝试使用 getString 时 - 它不会检索数据。我试图确定原因:

    String[] debtName = new String[10];
    String[] debtAmount = new String[10];
    String[] debtRate = new String[10];
    String[] debtPayment = new String[10];

    //Load Data

    SharedPreferences sharedPref= getSharedPreferences("chaosdatasnowball", 0);
    debtName = sharedPref.getString("debtNames", null).split(",");

    //End Load

    Bundle extras = getIntent().getExtras();
    int flipper = 0;
    for(int i=0;i<debtName.length;i++)
    {
        if(debtName[i].equals(null) && !extras.equals(null) && flipper!=1)
        {

            debtName[i] = extras.getString("newDebtName");
            debtAmount[i] = extras.getString("newDebtAmount");
            debtRate[i] = extras.getString("newDebtRate");
            debtPayment[i] = extras.getString("newDebtPayment");
            flipper = 1;
        }
    }

.....................

    StringBuilder value = new StringBuilder("");
    SharedPreferences.Editor editor= sharedPref.edit();

    for (String i : debtName) {
        value.append(i + ",");
    }
    editor.putString("debtNames", value.toString());

    for (String i : debtAmount) {
        value.append(i + ",");
    }
    editor.putString("debtAmounts", value.toString());

    for (String i : debtRate) {
        value.append(i + ",");
    }
    editor.putString("debtRates", value.toString());

    for (String i : debtPayment) {
        value.append(i + ",");
    }
    editor.putString("debtPayments", value.toString());

    editor.commit();

更正,当在调试之外运行时,这会产生一个空指针异常:

 SharedPreferences sharedPref= getSharedPreferences("chaosdatasnowball", 0);
        debtName = sharedPref.getString("debtNames", null).split(",");  <---this line

这里是调用活动的地方:

    EditText editDebtName = (EditText) findViewById(R.id.dispDebtName);
    debtName = editDebtName.getText().toString();

    EditText editDebtAmount = (EditText) findViewById(R.id.dispDebtAmount);
    String debtAmountStr = editDebtAmount.getText().toString();

    EditText editDebtRate = (EditText) findViewById(R.id.dispDebtRate);
    String debtRateStr = editDebtRate.getText().toString();

    EditText editDebtPayment = (EditText) findViewById(R.id.dispDebtPayment);
    String debtPaymentStr = editDebtPayment.getText().toString();

    Intent i = new Intent(this, DebtList.class);
    i.putExtra("newDebtName", debtName);
    i.putExtra("newDebtAmount", debtAmountStr);
    i.putExtra("newDebtRate", debtRateStr);
    i.putExtra("newDebtPayment", debtPaymentStr);

    startActivity(i);
4

2 回答 2

0

问题在于这一行:

debtName = sharedPref.getString("debtNames", null).split(",");

密钥可能debtNames不存在。因此返回 null。

当您第一次运行应用程序并且尚未将任何内容保存到共享首选项时,就会发生这种情况。

添加对 null 的检查并处理这种情况。例如,如果返回 null,则显示默认值,否则显示从 sharedpreference 读取的值。

于 2013-11-08T07:13:37.300 回答
0

我已经接受了一个明显的事实,即没有有效的方法来做到这一点,所以我现在已经将 40 个变量硬编码到应用程序中。如果有人提出任何有用的东西,请随时发布,我会经常检查。

于 2013-11-09T14:03:23.273 回答