Java 阅读偏好值

Java 阅读偏好值,java,android,Java,Android,我正在android上工作,试图从我的首选项文件中读取一个值。 但当我运行时,emulator 应用程序意外停止 这是我的首选文件名pref,它是inres/xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference and

我正在android上工作,试图从我的首选项文件中读取一个值。 但当我运行时,emulator 应用程序意外停止 这是我的首选文件名pref,它是inres/xml

<?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <CheckBoxPreference android:defaultValue="false"
             android:key="@string/first"/>
    </PreferenceScreen>
请有人解决问题。

在setContentView之后初始化onCreate函数中的文本(即EditText)

将这一行放在
setContentView(R.layout.main)之后

试试这个:

public class FinalWorkActivity extends Activity {
    private String pref_file="pref.xml";
    EditText text;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        text = (EditText) findViewById(R.id.editText1);
        SharedPreferences pref=getSharedPreferences(pref_file,Context.MODE_PRIVATE);
        Boolean val= pref.getBoolean("firstuse", true);
        if(val) {
        text.setText("first use");
        } else {
        text.setText("Not first use");
        }
    }
}
如果无法修复,请发布错误日志

编辑:请记住,保存首选项需要执行以下操作:

SharedPreferences pref = getSharedPreferences(pref_file,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();          
editor.putBoolean("firstuse", authToken);
editor.commit();

下面是你自己如何发现类似问题的答案。转到窗口->显示视图->日志猫

单击红色的行:

E/AndroidRuntime(333):在com.test.testing.YourActivityName.(TesterActivity.java:11)06-15 11:59:05.616:

你会看到红色:

06-15 11:59:05.526: W/dalvikvm(333): threadid=1: thread exiting with uncaught exception     (group=0x40015560)
06-15 11:59:05.616: E/AndroidRuntime(333): FATAL EXCEPTION: main
06-15 11:59:05.616: E/AndroidRuntime(333): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.test.testing/com.test.testing.TesterActivity}: java.lang.NullPointerException
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.os.Looper.loop(Looper.java:123)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.main(ActivityThread.java:3683)
06-15 11:59:05.616: E/AndroidRuntime(333):  at java.lang.reflect.Method.invokeNative(Native Method)
06-15 11:59:05.616: E/AndroidRuntime(333):  at java.lang.reflect.Method.invoke(Method.java:507)
06-15 11:59:05.616: E/AndroidRuntime(333):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-15 11:59:05.616: E/AndroidRuntime(333):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-15 11:59:05.616: E/AndroidRuntime(333):  at dalvik.system.NativeStart.main(Native Method)
06-15 11:59:05.616: E/AndroidRuntime(333): Caused by: java.lang.NullPointerException
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.Activity.findViewById(Activity.java:1647)
06-15 11:59:05.616: E/AndroidRuntime(333):  at com.test.testing.TesterActivity.<init>(TesterActivity.java:11)
06-15 11:59:05.616: E/AndroidRuntime(333):  at java.lang.Class.newInstanceImpl(Native Method)
06-15 11:59:05.616: E/AndroidRuntime(333):  at java.lang.Class.newInstance(Class.java:1409)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
06-15 11:59:05.616: E/AndroidRuntime(333):  ... 11 more
06-15 11:59:05.526:W/dalvikvm(333):threadid=1:线程以未捕获异常退出(组=0x40015560)
06-15 11:59:05.616:E/AndroidRuntime(333):致命异常:主
06-15 11:59:05.616:E/AndroidRuntime(333):java.lang.RuntimeException:无法实例化活动组件信息{com.test.testing/com.test.TesterActivity}:java.lang.NullPointerException
06-15 11:59:05.616:E/AndroidRuntime(333):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
06-15 11:59:05.616:E/AndroidRuntime(333):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-15 11:59:05.616:E/AndroidRuntime(333):在android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-15 11:59:05.616:E/AndroidRuntime(333):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-15 11:59:05.616:E/AndroidRuntime(333):在android.os.Handler.dispatchMessage(Handler.java:99)上
06-15 11:59:05.616:E/AndroidRuntime(333):在android.os.Looper.loop(Looper.java:123)
06-15 11:59:05.616:E/AndroidRuntime(333):位于android.app.ActivityThread.main(ActivityThread.java:3683)
06-15 11:59:05.616:E/AndroidRuntime(333):位于java.lang.reflect.Method.Invokenactive(本机方法)
06-15 11:59:05.616:E/AndroidRuntime(333):位于java.lang.reflect.Method.invoke(Method.java:507)
06-15 11:59:05.616:E/AndroidRuntime(333):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-15 11:59:05.616:E/AndroidRuntime(333):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-15 11:59:05.616:E/AndroidRuntime(333):在dalvik.system.NativeStart.main(本机方法)
06-15 11:59:05.616:E/AndroidRuntime(333):由以下原因引起:java.lang.NullPointerException
06-15 11:59:05.616:E/AndroidRuntime(333):在android.app.Activity.findViewById(Activity.java:1647)
06-15 11:59:05.616:E/AndroidRuntime(333):在com.test.testing.TesterActivity上。(TesterActivity.java:11)
06-15 11:59:05.616:E/AndroidRuntime(333):位于java.lang.Class.newInstanceImpl(本机方法)
06-15 11:59:05.616:E/AndroidRuntime(333):在java.lang.Class.newInstance(Class.java:1409)上
06-15 11:59:05.616:E/AndroidRuntime(333):在android.app.Instrumentation.newActivity(Instrumentation.java:1021)上
06-15 11:59:05.616:E/AndroidRuntime(333):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
06-15 11:59:05.616:E/AndroidRuntime(333):。。。还有11个

首先,您应该在调试模式下运行它。请密切关注logcat以及任何此类崩溃时发生的致命异常。它将向您显示导致它的行号。点击这一行,转到那一行。我反对你的问题,因为你应该始终包含stacktrace信息,并坦率地尝试自己检查它。此外,你还可以在Pref文件中找到未获取的值。。。你得到了什么价值?我也投了反对票,因为你没有投一个让你自己找到答案的答案。迟早会有其他错误,空指针异常。您首先要查看崩溃日志。它会告诉你什么是空的,然后你的问题是:很有可能你自己也会在这一点上找到答案。最好花些时间在调试和观察代码的技术上。这个答案是正确的。但是,您应该始终将问题与堆栈跟踪一起发布。始终首先查看eclipse中logcat视图中可查看的堆栈跟踪。这将为您提供更多信息。是的,这是有效的。但在更多问题上,它没有读取存储在pref文件中的值。string.xml中的entry@string/first是什么?您能确认我吗?请具体说明。未获取值的信息不足。我获取的信息是正确的。问题是我没有更改m代码中的默认值。还有一个问题是未从pref文件中读取默认值。是否确实正确保存了它们?请检查我的编辑。您的代码不起作用,因为您在onCreate方法之外实例化和编辑文本,并且尚未定义视图R.id.editText1。您如何知道它没有读取默认值?它的名字完全一样吗。通常会重新提出新问题。
SharedPreferences pref = getSharedPreferences(pref_file,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();          
editor.putBoolean("firstuse", authToken);
editor.commit();
06-15 11:59:05.526: W/dalvikvm(333): threadid=1: thread exiting with uncaught exception     (group=0x40015560)
06-15 11:59:05.616: E/AndroidRuntime(333): FATAL EXCEPTION: main
06-15 11:59:05.616: E/AndroidRuntime(333): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.test.testing/com.test.testing.TesterActivity}: java.lang.NullPointerException
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.os.Looper.loop(Looper.java:123)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.main(ActivityThread.java:3683)
06-15 11:59:05.616: E/AndroidRuntime(333):  at java.lang.reflect.Method.invokeNative(Native Method)
06-15 11:59:05.616: E/AndroidRuntime(333):  at java.lang.reflect.Method.invoke(Method.java:507)
06-15 11:59:05.616: E/AndroidRuntime(333):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-15 11:59:05.616: E/AndroidRuntime(333):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-15 11:59:05.616: E/AndroidRuntime(333):  at dalvik.system.NativeStart.main(Native Method)
06-15 11:59:05.616: E/AndroidRuntime(333): Caused by: java.lang.NullPointerException
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.Activity.findViewById(Activity.java:1647)
06-15 11:59:05.616: E/AndroidRuntime(333):  at com.test.testing.TesterActivity.<init>(TesterActivity.java:11)
06-15 11:59:05.616: E/AndroidRuntime(333):  at java.lang.Class.newInstanceImpl(Native Method)
06-15 11:59:05.616: E/AndroidRuntime(333):  at java.lang.Class.newInstance(Class.java:1409)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
06-15 11:59:05.616: E/AndroidRuntime(333):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
06-15 11:59:05.616: E/AndroidRuntime(333):  ... 11 more