Android getSharedPreferences在方法中不起作用

时间:2016-08-02 06:34:59

标签: java android sharedpreferences

public static void GetAllPoints(final IGetAllPointsCallBack callBack) {    
    SharedPreferences entity =  getSharedPreferences("settings",MODE_PRIVATE);
    String savedValue = entity.getString("entityGUID",null);
}

getSharedPreferences在这里不起作用,有没有办法在我的方法中调用它,而我将其值保存在另一个类中?

我正在保存我的偏好:

EntityType selectedItem = ApplicationController.entities.get(which);
SharedPreferences.Editor savedValue = getSharedPreferences("settings",MODE_PRIVATE).edit();
savedValue.putString("entityGUID", String.valueOf(selectedItem.EntityGUID));
savedValue.apply();

我需要让我的方法静态是因为我从另一个类访问它:

    public void showAllSpots()
    {
     DataService.GetAllPoints(newDataService.IGetAllChargingPointsCallBack() {
     @Override
     public void Success(ArrayList<ChargingSpot> chargingSpots) {
      //
     }

     });
    }

2 个答案:

答案 0 :(得分:1)

您需要更改方法,使其不是static或者您需要提供Context作为此方法的参数之一,然后您的方法将如下所示:

public static void GetAllPoints(final Context context, final IGetAllPointsCallBack callBack) {    
    SharedPreferences entity =  context.getSharedPreferences("settings",Context.MODE_PRIVATE);
    String savedValue = entity.getString("entityGUID",null);
}

我希望这会有所帮助。

答案 1 :(得分:0)

根据Context的官方文档,discussion on Ask Tom不是static。因此,您无法在static方法中访问它。

尝试定义您的方法,如下所示,它应该有效:

public void GetAllPoints(final IGetAllPointsCallBack callBack) {    
    SharedPreferences entity =  getSharedPreferences("settings",MODE_PRIVATE);
    String savedValue = entity.getString("entityGUID",null);
}

编辑:在检查您的评论回复后,我注意到您要求保持GetAllPoints(...)静态。解决方法是传递调用Context并从中调用getSharedPreferences(...)

public void GetAllPoints(final Context context, final IGetAllPointsCallBack callBack) {    
    SharedPreferences entity =  context.getSharedPreferences("settings",MODE_PRIVATE);
    String savedValue = entity.getString("entityGUID",null);
}