0

我给了我这些错误。如何使用偏好活动为shakeeventlistener类存储变量?

04-13 15:01:41.600: E/AndroidRuntime(8431): FATAL EXCEPTION: main 
04-13 15:01:41.600: E/AndroidRuntime(8431): java.lang.RuntimeException: Unable to start activity ComponentInfo {com.omnilabs.alexandernapoles.hl2sticl/com.example.example.example.MainClass}: java.lang.NullPointerException 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.os.Looper.loop(Looper.java:137) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at dalvik.system.NativeStart.main(Native Method) 
04-13 15:01:41.600: E/AndroidRuntime(8431): Caused by: java.lang.NullPointerException 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.content.ContextWrapper.getPackageName(ContextWrapper.java:127) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.preference.PreferenceManager.getDefaultSharedPreferencesName (PreferenceManager.java:371) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.preference.PreferenceManager.getDefaultSharedPreferences (PreferenceManager.java:366) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at com.example.example.example.ShakeEventListener.<init>(ShakeEventListener.java:24) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at com.example.example.example.MainClass.onCreate(StunBatton.java:38) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.app.Activity.performCreate(Activity.java:4465) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
04-13 15:01:41.600: E/AndroidRuntime(8431):  ... 11 more 

这里是我的shakevent监听器类的一部分,涉及的喜好

public class ShakeEventListener extends Application implements SensorEventListener { 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(); 


} 
SharedPreferences preferences = 
     PreferenceManager.getDefaultSharedPreferences(this); 


private String editTextPref = getString(R.string.preference_key); 
int nVar = preferences.getInt(editTextPref, MODE_PRIVATE); 
int MIN_FORCE = nVar; 
/** 
* Minimum times in a shake gesture that the direction of movement needs to 
* change. 
*/ 
private static final int MIN_DIRECTION_CHANGE = 15; 

/** Maximum pause between movements. */ 
private static final int MAX_PAUSE_BETHWEEN_DIRECTION_CHANGE = 50000; 

等等等等

preferences.java

package com.example.example.example; 

import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class Preferences extends PreferenceActivity { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       addPreferencesFromResource(R.layout.preferences); 


     } 
} 

的preferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
     <PreferenceCategory 
       android:title="First Category"> 
     <EditTextPreference 
       android:name="Stun Swing Sensitivity" 
       android:summary="This allows you to custom fit your sensitivity." 
       android:defaultValue="10" 
       android:numeric="integer" 
       android:maxLength="200" 
       android:title="Sensitivity Level" 
       android:key="@string/preference_key" /> 
     </PreferenceCategory> 

</PreferenceScreen> 

里面的strings.xml的,我把 editTextPref

所以基本上我只是想知道我可以在它使用onShake一个类文件的活动要求,然后晃动使用一个变量();从摇动活动调用,但我想保存MIN_FORCE作为变量nVar和nVar是在首选项文件这是一个整数的设置。

请帮忙!!!!!!!!!

编辑: 我知道它有与此代码

 SharedPreferences preferences = 
      PreferenceManager.getDefaultSharedPreferences(this); 
String editTextPref = getString(R.string.preference_key); 
nVar = preferences.getInt(editTextPref, 10); 

回答

1

您必须将呼叫转移到getDefaultSharedPreferencesonCreate(或更高版本的回调)做。它不能在外面工作,因为在对象构建时你的Activity没有完全建立。

public class ShakeEventListener extends Application implements SensorEventListener { 

int nVar = 0; 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(); 
    SharedPreferences preferences = 
     PreferenceManager.getDefaultSharedPreferences(this); 


    private String editTextPref = getString(R.string.preference_key); 
    nVar = preferences.getInt(editTextPref, MODE_PRIVATE); 
    int MIN_FORCE = nVar; 
} 
+0

感谢您的回复! MIN_FORCE被其他函数调用,所以我删除了int MIN_FORCE = nVar;并将它移到onCreate之外让其他函数可见,现在nVar无法解析为变量duh,所以现在我不能移出它,因为它需要在创建时:PI知道答案必须是简单即时只是目前有一个大脑屁。 – user1332318 2012-04-13 19:52:08

+0

如果你想从外部访问'nVar',那么你可以在'onCreate'之外取代它,但仍然在那里指定它。更新了我的答案。 – zapl 2012-04-14 12:59:37