3

我有一个存储名称的设置活动,通过更改名称,它必须首先将其发送到我的服务器,如果它成功存储在服务器中,那么它应该在我的摘要中设置EditTextPreference

一切正常,但最后我无法在其EditTextPreference上设置名称。

onPostExecute此方法在设置活动中,但从AsyncTask

  public void setNewSetting(Activity activity) {
    EditTextPreference editTextPreference = (EditTextPreference) UserSettingActivity.this.findPreference(activity.getString(R.string.pref_name_key));
    name = sharedPreferences.getString(activity.getString(R.string.pref_name_key), "");
    editTextPreference.setSummary(name);
}

活动是我传递给AsyncTask然后传递给方法的设置活动。

我的问题在这里,给我nullPoiterException一个EditTextPreferences

对不起,我的英语不好。并提前感谢。

4

1 回答 1

1

方法一:

如果活动仍在后台,请将您的传递contextAsyncTask并创建设置活动的实例。

SettingsActivity settingsActivity = (SettingsActivity) context;

然后,调用方法onPostExecute()

settingsActivity.setNewSetting();

并且,setNewSetting()在 SettingsActivity 中有你的方法。它应该是公开的,并对空值进行一些检查。

方法二:

使用接口委托。创建接口:

 public interface TaskListener {
        void onComplete();
    } 

执行时将其传递给 AsyncTask,例如:

new MyAsyncTask(params, params, new TaskListener() {

    @Override
    public void onComplete () {

        // call setNewSetting from within SettingsActivity
    }

}).execute();

您可以在 AsyncTask 构造函数中获得它:

public MyAsyncTask (String params, String param2, TaskListener taskListenerDelegate) {

    this.taskListenerDelegate = taskListenerDelegate;
}

调用onComplete()onPostExecute()

taskListenerDelegate.onComplete();

方法三

不推荐,但你也可以试试startActivityForResult()。并且,倾听onActivityResult()以应用更改。

于 2017-05-22T10:26:21.513 回答