在 PreferenceFragment 中使用 AsyncTask

Using AsyncTask in PreferenceFragment

我正在尝试创建共享首选项以将一些身份验证信息保存到第三方服务。在我的 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 完成。

有什么建议吗?

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

代码

@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 是一个自定义 class,它包装所有异步内容并调用通知方法。