我有一个设置Activity存储名称,通过更改它必须首先发送到我的服务器的名称,如果它在服务器中的存储成功,那么它应该在我的EditTextPreference的摘要中设置.
一切正常,但最后我无法触摸EditTextPreference来设置它的名称.
此方法用于设置活动,但是从AsyncTask的onPostExecute调用
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);
}
activity是我传递给AsyncTask然后传递给方法的设置活动.
我的问题在这里,给我一个EditTextPreferences的nullPoiterException
对不起,我的英语不好.
并提前感谢.
解决方法:
方法1:
如果活动仍在后台,请将您的上下文传递给AsyncTask并创建Settings Activity的实例.
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;
}
在onPostExecute()中调用它的onComplete():
taskListenerDelegate.onComplete();
方法3
不推荐,但您也可以尝试使用startActivityForResult().并且,在onActivityResult()中监听以应用更改.