Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在检查共享prefs设置屏幕上的编辑文本_Android_Regex_Sharedpreferences - Fatal编程技术网

Android 正在检查共享prefs设置屏幕上的编辑文本

Android 正在检查共享prefs设置屏幕上的编辑文本,android,regex,sharedpreferences,Android,Regex,Sharedpreferences,我想知道是否有办法检查共享优先/设置屏幕上输入的内容以进行验证。用户触摸Ip输入选项,弹出一个edittext对话框,我试图将他们可以输入的内容限制为标准Ip地址(即0-255.0-255.0-255.0-255.0-255)。我在许多在线论坛中都看到了使用正则表达式和模式的不同示例,这就是我到目前为止看到的,但绝对没有发生任何事情……有人能帮我吗?我将不胜感激 public class PrefsActivity extends PreferenceActivity implement

我想知道是否有办法检查共享优先/设置屏幕上输入的内容以进行验证。用户触摸Ip输入选项,弹出一个edittext对话框,我试图将他们可以输入的内容限制为标准Ip地址(即0-255.0-255.0-255.0-255.0-255)。我在许多在线论坛中都看到了使用正则表达式和模式的不同示例,这就是我到目前为止看到的,但绝对没有发生任何事情……有人能帮我吗?我将不胜感激

    public class PrefsActivity extends PreferenceActivity implements
        OnSharedPreferenceChangeListener
{
    private EditTextPreference ipTextBox;
    private String whatWasTyped;
    private String previousText = "";
    private Editor myEditor;

    final Pattern IP_ADDRESS = Pattern
            .compile("^((1\\d{2}|2[0-4]\\d|25[0-5]|\\d?\\d)\\.){3}(?:1\\d{2}|2[0-4]\\d|25[0-5]|\\d?\\d)$");
    private String IP_FROM_PREFS = "ipAddressPref";
    SharedPreferences prefs;

    @Override
    /**
     * The onCreate method handles thing when starting this activity, 
     * mainly display the activity_settings.xml.
     */
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // pattern for IP address validation
        addPreferencesFromResource(R.layout.activity_settings);

        // prefs.registerOnSharedPreferenceChangeListener(this);

        prefs = PreferenceManager.getDefaultSharedPreferences(this);
        // Get a reference to the preferences
        ipTextBox = (EditTextPreference) getPreferenceScreen().findPreference(
                IP_FROM_PREFS);

    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key)
    {
        // check prefs value for IP.

        if (key.equals(IP_FROM_PREFS))
        {

            whatWasTyped = prefs.getString(IP_FROM_PREFS, "");
            CharSequence s = whatWasTyped;
            if (IP_ADDRESS.matcher(s).matches())
            {
                previousText = s.toString();
                            myEditor = prefs.edit();
                            myEditor.putString(IP_FROM_PREFS, previousText);
                myEditor.commit();

            } else
            {
                //if the format does not match, put up an error message
                            // or something.

            }
        }

    }

    @Override
    protected void onResume()
    {
        super.onResume();

        // Setup the initial values
        // mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key,
        // false) ? "Disable this setting" : "Enable this setting");
        // mListPreference.setSummary("Current value is " +
        // sharedPreferences.getValue(key, ""));

        // Set up a listener whenever a key changes
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);
        previousText = prefs.getString(IP_FROM_PREFS, "");
    }

    @Override
    protected void onPause()
    {
        super.onPause();

        // Unregister the listener whenever a key changes
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(this);
    }

}
由于这是在shared prefs屏幕上创建的,因此没有按钮id等。

只是写入

 whatWasTyped.replace(s, previousText);

不会将以前的文本分配给SharedReference您需要将其分配回共享首选项并提交

是的,我刚想到这个。粗心的我!我会做出调整并回复。因此我对文件进行了一些编辑,缩短了模式,并在用户输入的内容格式良好时提交更改。我是通过myEditor完成的。在这一行中:addPreferencesFromResource(R.layout.activity\u settings);你应该把activity_settings.xml放在xml文件夹中,而不是布局文件夹对不起,我纠正了我的模式:\b(?:(:25[0-5]| 2[0-4]\d | 1\d{2}\d?\d)\{3}(?:25[0-5]| 2[0-4]\d | 1\d{2}\d?\b