【问题标题】:How do I use a preference activity to store a variable for a shakeeventlistener class?如何使用首选项活动来存储shakeeventlistener 类的变量?
【发布时间】:2012-04-13 19:11:37
【问题描述】:

我所拥有的东西给了我这些错误。

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 里面我放了 编辑文本首选项

所以基本上我只想知道如何在活动调用摇动的类文件中使用变量,然后它使用 onShake();从摇动活动中调用,但我想将 MIN_FORCE 保存为变量 nVar 并且 nVar 是首选项文件中的设置,即整数。

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

编辑: 我知道这与这段代码有关

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

【问题讨论】:

    标签: android variables android-layout android-intent sharedpreferences


    【解决方案1】:

    您必须将调用移至onCreate 内的getDefaultSharedPreferences(或稍后的回调)。它在外部不起作用,因为在对象构建时您的 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;
    }
    

    【讨论】:

    • 感谢您的精彩回复! MIN_FORCE 被其他函数调用,所以我删除了 int MIN_FORCE = nVar;并将其移出 onCreate 以使其对其他函数可见,现在 nVar 无法解析为变量 duh,所以现在我无法将其移出,因为它需要在创建时出现:P 我知道答案必须是很简单,我现在只是在放屁。
    • 如果您希望从外部访问nVar,那么您可以在onCreate 之外对其进行声明,但仍将其分配在那里。在我的回答中更新了。
    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2013-09-20
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多