[英]Getting NullPointerException while fetching value from shared preference
[英]NullPointerException while trying to setTitle() for Preference
我有一个“帐户信息活动”,我需要显示使用PreferenceFragment从互联网上获得的帐户信息给用户。
而且我正在尝试为首选项设置标题,但是每次尝试这样做时,每次遇到java.lang.NullPointerExcption
时,我都会这样做。
那么问题是什么,我该怎么办?
AccountData.java
import android.app.Activity;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
public class AccountData extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new PrefsFragment()).commit();
try {
PrefsFragment PF = new PrefsFragment();
PF.setAccountName();
} catch (Exception e) {
e.printStackTrace();
}
}
public static class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.account_data);
}
public void setAccountName() {
Preference AccountName = (Preference) findPreference("account_name");
AccountName.setTitle("Account Name");
}
}
}
account_data.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/account" >
<Preference
android:key="account_name"
android:selectable="false"
android:summary="@string/account_name"
android:title="@string/none" />
<Preference
android:key="account_type"
android:selectable="false"
android:summary="@string/account_type"
android:title="@string/none" />
</PreferenceCategory>
</PreferenceScreen>
_ ** 编辑 ** _
堆栈跟踪
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.AccountData}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2088)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113)
at android.app.ActivityThread.access$700(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4918)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.app.AccountData$PrefsFragment.setAccountName(AccountData.java:39)
at com.example.app.AccountData.onCreate(AccountData.java:21)
at android.app.Activity.performCreate(Activity.java:5048)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052)
... 11 more
尝试将调用移到片段的onResume()中。
public void onResume() {
Preference AccountName = (Preference) findPreference("account_name");
AccountName.setTitle("Account Name");
}
我从未使用过“ PreferenceFragment”,但这可能是因为UI尚未初始化。 对onCreate的调用是从UI线程进行的,它将阻止其他UI事务,例如添加片段。 因此,即使您已在用户界面中添加了一个片段,这也是一个延迟的调用,并且尚未获得任何回调。
这个
PrefsFragment PF = new PrefsFragment();
PF.setAccountName();
确实有效,因为它不会调用onCreate。
仅使用一个PrefsFragment实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.