【问题标题】:How can I store Google Location Position in SharedPreferences如何在 SharedPreferences 中存储 Google Location Position
【发布时间】:2014-05-20 19:49:14
【问题描述】:

我正在使用 Google Location Api 获取位置并收听位置变化。但是如果我在 SharedPreferences 中发送这些位置值,我的应用程序就会崩溃。我的错误是什么?

我想让每个位置更改触发我的 SharedPreferences 值更新。

挖掘 FragmentActivity 类

SessionManagement s = new SessionManagement(this);

@Override
public void onLocationChanged(Location location) {
    Log.d("deneme","Your position : " + location.getLatitude()+" " + location.getLongitude());
    s.setLatitude(String.valueOf(location.getLongitude()));
}

还有我的会话管理类

public class SessionManagement {

static Activity activity;

public SessionManagement(Activity act){
         activity = act;
}

public void setLatitude(String x){
    SharedPreferences sp = activity.getSharedPreferences("sp", 0);
    SharedPreferences.Editor spEditor = sp.edit();
    spEditor.putString("latitude", x);
    spEditor.commit();
    m_latitude = x;
}

我收到了这些错误

 05-20 22:45:23.090: E/AndroidRuntime(9931): FATAL EXCEPTION: main
 05-20 22:45:23.090: E/AndroidRuntime(9931): java.lang.NullPointerException
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at      com.yuvety.widget.SessionManagement.setLatitude(SessionManagement.java:70)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at com.yuvety.main.Pager.onLocationChanged(Pager.java:194)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at com.google.android.gms.internal.gm$a.handleMessage(Unknown Source)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at android.os.Handler.dispatchMessage(Handler.java:99)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at android.os.Looper.loop(Looper.java:176)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at android.app.ActivityThread.main(ActivityThread.java:5419)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at java.lang.reflect.Method.invokeNative(Native Method)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at java.lang.reflect.Method.invoke(Method.java:525)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
 05-20 22:45:23.090: E/AndroidRuntime(9931):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 您确定activity 不为空吗?我敢打赌是
  • 是的,我很确定,因为我看到了 Logcat 的价值。
  • SessionManagement 的第 70 行是什么?
  • 这一行:SharedPreferences sp = activity.getSharedPreferences("sp", 0);
  • 是的,所以活动是空的,就像我说的那样

标签: android sharedpreferences google-api-java-client


【解决方案1】:

当您创建新的 SessionManagement 对象时,您是否尝试过 getActivity() 而不是这个?作为最佳实践,在调用 getActivity() 时检查 null,因为如果片段尚未附加,它可能会返回 null。 您也可以尝试使用上下文而不是活动。

【讨论】:

  • activity继承了上下文,所以不管你是否使用activity并且他是从一个activity中使用它,所以getActivity()在Activity中不可用,只有一个片段
  • 你是对的,我误读了他试图从 Fragment 访问它。但是使用上下文不是更好的方法吗?如果他稍后尝试从 IntentService 等访问它怎么办?
猜你喜欢
  • 2015-04-02
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多