我在我的应用程序中使用一个类来创建一个会话,以便我可以在活动等之间存储一个移动变量。所以我有一个特定的类可以SharedPrefrences
用来做到这一点。
我也有一个谷歌地图,上面有叠加层和项目。我的目的是能够在onTap
事件发生时存储一些地理位置信息。
为此,我在我的SessionManager
班级(使用 SharedPrefrences)中创建了第二个 void,我在onTap
事件中调用它。问题是我面临一个NullPointerException
. void 内的变量是从地图中正确收集的,并且不为空。这是在 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
。我不确定获得 a 的所有原因是什么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();
}