SharedPreferences不存储数据并返回NullPointerException

时间:2013-01-04 17:59:38

标签: java android sharedpreferences

我在我的应用程序中使用了一个类,用于创建会话,以便我可以在活动之间存储移动变量等。所以我有一个使用SharedPrefrences的类来执行此操作。

我还有一个谷歌地图,上面有覆盖物和物品。我的目的是能够在发生onTap事件时存储一些地理位置信息。

为此,我在我的SessionManager类(使用SharedPrefrences)中创建了第二个void,我在onTap事件中调用了它。问题是我遇到了NullPointerException。 void中的vars是从map中正确收集的,不是null。这是在onTap事件中:

GeoPoint mPoint;
  OverlayItem item = mOverlays.get(index);
  mPoint = item.getPoint();

session.mapInputs(Double.toString(mPoint.getLatitudeE6()/1E6), Double.toString(mPoint.getLongitudeE6()/1E6);

当我呼叫mapInputs()面对NullPointerException时。我不确定获取NullPointerException的所有原因是什么,Double检查了在void中传递的变量,它们不是空的。我还尝试使用SharedPrefrences创建一个新类,但同样的问题又出现了。

所以我无法弄清楚我做错了什么..

以下是我的Logcat错误(MapFeeder中的第60行是mapInputs void):

01-04 15:47:37.999: E/AndroidRuntime(308): FATAL EXCEPTION: main
01-04 15:47:37.999: E/AndroidRuntime(308): java.lang.NullPointerException
01-04 15:47:37.999: E/AndroidRuntime(308):  at        com.cabman.lol.ok.MapFeeder.onTap(MapFeeder.java:60)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453)
01-04 15:47:37.999: E/AndroidRuntime(308):  at  com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:347)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.google.android.maps.GestureDetector.onTouchEvent(GestureDetector.java:533)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.google.android.maps.MapView.onTouchEvent(MapView.java:647)
01-04 15:47:37.999: E/AndroidRuntime(308):  at android.view.View.dispatchTouchEvent(View.java:3766)
01-04 15:47:37.999: E/AndroidRuntime(308):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
01-04 15:47:37.999: E/AndroidRuntime(308):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-04 15:47:37.999: E/AndroidRuntime(308):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-04 15:47:37.999: E/AndroidRuntime(308):  at     android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
01-04 15:47:37.999: E/AndroidRuntime(308):  at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
01-04 15:47:37.999: E/AndroidRuntime(308):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
01-04 15:47:37.999: E/AndroidRuntime(308):  at    android.os.Handler.dispatchMessage(Handler.java:99)
01-04 15:47:37.999: E/AndroidRuntime(308):  at android.os.Looper.loop(Looper.java:123)
01-04 15:47:37.999: E/AndroidRuntime(308):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-04 15:47:37.999: E/AndroidRuntime(308):  at java.lang.reflect.Method.invokeNative(Native Method)
01-04 15:47:37.999: E/AndroidRuntime(308):  at java.lang.reflect.Method.invoke(Method.java:521)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-04 15:47:37.999: E/AndroidRuntime(308):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-04 15:47:37.999: E/AndroidRuntime(308):  at dalvik.system.NativeStart.main(Native Method)

这也是我的SessionManger类的一部分:

public class SessionManager {


SharedPreferences pref;

Editor editor;

Context context;

int PRIVATE_MODE = 0;

...

 public SessionManager(Context context){

    this.context = context;
    pref = context.getSharedPreferences(PREF_NAME,PRIVATE_MODE);
    editor = pref.edit();
}

...

    public void mapInputs(String startLat,  String startLon ){

editor.putString(KEY_LAT, startLat);
editor.putString(KEY_LON, startLon);
editor.commit();

}

0 个答案:

没有答案