我有一个设置Activity来存储名称,通过更改它必须首先发送到我的服务器的名称,如果它在服务器中的存储成功,那么它应该在我的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
抱歉我的英语不好。 并提前感谢。
答案 0 :(得分:1)
方法1:
如果活动仍在后台,请将context
传递给AsyncTask
并创建设置活动的实例。
SettingsActivity settingsActivity = (SettingsActivity) context;
然后,在onPostExecute()
settingsActivity.setNewSetting();
并且,在您的SettingsActivity中使用setNewSetting()
方法。它应该是公共的,并对空值进行一些检查。
方法2:
使用接口委托。创建一个界面:
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();
方法3
不推荐,但您也可以尝试使用startActivityForResult()
。并且,在onActivityResult()
中收听以应用更改。