2

我正在尝试创建一个共享首选项以将一些身份验证信息保存到第三方服务。在我的preferences.xml 中有一个登录名和密码字段,但我想在编辑时检查这些值是否有效(验证)。什么是好方法?

到目前为止,我有这个:

在创建时

findPreference("sync_service_enabled").setOnPreferenceChangeListener(this);
findPreference("sync_service_user").setOnPreferenceChangeListener(this);
findPreference("sync_service_pwd").setOnPreferenceChangeListener(this);

我的听众

public boolean onPreferenceChange(Preference preference, Object newValue) {
    if (preference.getKey().contains("sync_service")){
     new AuthenticationRemoteAsyncTask(this.getActivity(), user, password, service).execute();
    }
    return true;

我还需要保存远程服务生成的令牌,所以我需要等待 aynstask 完成。

有什么建议吗?

4

1 回答 1

1

我解决了创建自定义对话框首选项的问题。我替换了 onclicklistener 上的肯定按钮,因此它不会自动关闭对话框并启动我的远程任务。asynctask 将在成功后通知我的preferencedialog,然后我才关闭对话框。

代码

@Override
protected void showDialog(Bundle state) {
    super.showDialog(state);
    ...
    positiveButton.setOnClickListener(this);
    negativeButton.setOnClickListener(this);
}

onclick 处理程序

public void onClick(View view){
    this.result = null;
    if(view.getId() == positiveButton.getId()) {
        String password = textPassword.getText().toString();
        String user = textLogin.getText().toString();

        new AuthenticationTask(getContext(),user, password)
            .notify(this).execute();
    }else{
        alertDialog.dismiss();
    }
}

关闭前检查结果

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);

    if (result != null) {
        SharedPreferences.Editor editor = getEditor();
        editor.putString("sync_service_token",result);
        editor.commit();
    }
}

AuthenticationTask 是一个自定义类,它包装所有异步内容并调用通知方法。

于 2015-11-12T10:57:40.120 回答