0

大家,早安,

我在创建我的第一个应用程序的过程中再次遇到问题。这次使用 SharedPreferences 文件。

我有 2 个活动必须使用相同的 SharedPreferences 文件。第一个是 MainActivity,第二个是数据的编辑布局。

在 MainActivity 我有以下方法,我使用数据连接到 PLC:

        //initialize the SharedPreferences variables for the PLC Data and Connection
    m_DataPLC = getSharedPreferences("CFTPreferences",CONTEXT_IGNORE_SECURITY);
    m_DataEditorPLC = m_DataPLC.edit();

    //Gets the number from the IP Address for the connection with the PLC
    //As default, the system takes the value of a static string value
    //This is when the SharedPreferences file is empty
    m_IpAddress = getResources().getString(R.string.ip_Address);
    m_NewIpAddress = m_DataPLC.getString("newIpAddress", m_NewIpAddress);
    if(m_NewIpAddress == null)
    {
        m_DataEditorPLC.putString("newIpAddress", m_IpAddress.toString());
        m_DataEditorPLC.commit();
        m_OldIpAddress = m_NewIpAddress = m_IpAddress;
    }
    else
    {
        m_OldIpAddress = m_IpAddress = m_NewIpAddress; 
    }

    //Start the connection with the PLC
    m_Connection = new ModbusConnection(this,m_IpAddress);
    inet = m_Connection.loginPLC();

在我的第二个活动中,我必须加载相同的数据并能够对其进行修改。我首先要做的是登录 SharedPreferencesFile:

dataPLC = getSharedPreferences("CFTPreferences",CONTEXT_IGNORE_SECURITY);
dataEditorPLC = dataPLC.edit();

然后我用一个按钮的点击动作来写:

    public void setIPAddress()
{
    if (!newIpAddress.equals(etIPAddress.getText().toString()))
    {
        dataEditorPLC.putString("oldIpAdd",ipAddress.toString());
        dataEditorPLC.putString("newIpAdd",etIPAddress.getText().toString());
        dataEditorPLC.commit();
    }
}

我不知道我是否在两次调用同一个文件时做错了,或者我是否需要做一些额外的事情来修复它。看起来它进行了更新,但它没有刷新 MainActivity。如果有人遇到同样的问题,我将不胜感激!!!!

提前谢谢了!!!

4

1 回答 1

1

onCreate()我认为您正在访问第一个活动中共享首选项的值。那将是你的问题。因为当你从第二个活动回到第一个活动时,你onCreate()的不是被调用,而是onResume()被调用。因此,更好的做法是将访问SharedPreferences值的代码移到单独的函数中,并在 和 中调用该onCreate()函数onResume()

例如

public void getSharedPrefernces() {
  m_DataPLC = getSharedPreferences("CFTPreferences",CONTEXT_IGNORE_SECURITY);
  m_NewIpAddress = m_DataPLC.getString("newIpAddress", m_NewIpAddress);
}

希望这可以帮助..!!干杯...

于 2012-10-01T08:36:35.123 回答