0

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

}

4

0 回答 0