2012-06-15 57 views
-2

我正在使用android并尝试从我的首选项文件读取值。 但是当我出现在emulator.the run.a消息的应用程序已停止意外 这里是我的偏好设置文件名pref.and是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> 

这是我的主要活动重新评估价值。

package code.finalwork; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.widget.EditText; 

public class FinalWorkActivity extends Activity { 
    private String pref_file="pref.xml"; 
EditText text=(EditText) findViewById(R.id.editText1); 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     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"); 
     } 


    } 
} 

请有人找出问题。

+1

那么首先你应该在调试模式下运行它。留意logcat和致命的异常,这种情况发生在这样的崩溃中。它会显示导致它的行号。点击这个去那一行。 –

+0

我下来投票你的问题,因为你应该总是包括堆栈跟踪信息,并坦率地尝试自己检查它。 –

+0

另外你在Pref文件中没有获得价值......你获得了什么价值? –

回答

0

试试这个:

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(); 
+0

感谢这项工作给我。 – Kamran

+0

但为什么它不在我的代码? – Kamran

+0

还有一个问题,它不是从pref文件读取默认值。 – Kamran

3

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

,就把这行后setContentView(R.layout.main);

EditText text=(EditText) findViewById(R.id.editText1); 
+0

这个答案是正确的。但是,您应该始终使用堆栈跟踪发布您的问题。总是先看看eclipse中logcat视图中可见的堆栈跟踪。这会给你更多的信息。 –

+0

是的工作。但更多的问题,它不读取存储在pref文件中的值。 – Kamran

+0

string.xml中的条目@ string/first是什么,你能确认我吗? –

1

这里是你如何能找到的答案是这样的自己。去窗口 - > showview-> logcat的

点击红色线:

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

你会看到在红色: 11月6日至15日:59:05.526:W/dalvikvm(333):线程ID = 1:螺纹与未捕获的异常(组= 0x40015560)离开 06- 15 11:59:05.616:E/AndroidRuntime(333):致命例外:主 06-15 11:59:05.616:E/AndroidRuntime(333):java.lang.RuntimeException:无法实例化活动ComponentInfo {com.test .testing/com.test.testing.TesterActivity}:java.lang.N ullPointerException 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):在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(本机方法) 11月6日至15日:59:05.616:E/AndroidRuntime(333):显示java.lang.NullPointerException 11月6日至15日:59:05.616:致E/AndroidRuntime(333):在android.app.Activity.findViewById(Activity.java:1647) 十一月6日至15日: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(本机方法) 11月6日至一十五日:59:05.616:E/AndroidRuntime(333):在java.lang.Class中。的newInstance(Class.java:1409) 11月6日至15日:59:05.616:E/AndroidRuntime(333):在android.app.Instrumentation.newActivity(Instrumentation.java:1021) 11月6日至15日:59:05.616: E/AndroidRuntime(333):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 06-15 11:59:05.616:E/AndroidRuntime(333):11 ...更多