0

おはようございます。

最初のアプリを作成するプロセスで再び問題が発生しました。今回は SharedPreferences ファイルを使用します。

同じ SharedPreferences ファイルを使用する必要がある 2 つのアクティビティがあります。1 つ目は MainActivity で、2 つ目はデータの編集レイアウトです。

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();

2 番目のアクティビティでは、同じデータをロードして変更できるようにする必要があります。最初に行うことは、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();
    }
}

同じファイルを2回呼び出すのが間違っているのか、それともこれを修正するために何か特別なことをしなければならないのか、私にはわかりません。更新はしているように見えますが、MainActivity は更新されません。誰かが同じ問題を抱えていたら、これについて助けていただければ幸いです!!!.

よろしくお願いします!!!

4

1 に答える 1

1

onCreate()最初のアクティビティの Shared Preferences の値にアクセスしていると思います。それがあなたの問題になります。2 番目のアクティビティから最初のアクティビティに戻ったときに、あなたの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 に答える