我在我的应用程序中使用了一个类,用于创建会话,以便我可以在活动之间存储移动变量等。所以我有一个使用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();
}