use*_*938 -2 android sharedpreferences
这是save()我的应用程序中的方法:
public void save() {
Context context;
SharedPreferences sp = context.getSharedPreferences("gameSave",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("X", player.getX());
editor.putInt("Y", player.getY());
editor.putInt("level", player.getLevel());
editor.putFloat("xp", player.getXp());
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
我一直试图让它工作一段时间,但这getSharedPreferences (String name, int mode)对我来说并没有起作用.它不会出现在它自己的context.getSharedPreferences()工作上,但是NullPointerException由于我的背景,我认为这会产生一个.我已经尝试save(Context context){}过构造函数,但是从该方法内部声明的上下文的另一个方法调用它也不起作用.我看了很多例子,但没有一个能为我效劳.那我怎么getSharedPreferences()去上班?
编辑:我有一个类GameScreen和一个类SaveManager.当我在Gamescreen中保存时,这是我使用的代码:
Savemanager savemanager;
savemanager.save();
state = GameState.Running;
Run Code Online (Sandbox Code Playgroud)
我有我的类SaveManager:
package com.package.game;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class SaveManager extends Activity {
private Player player = GameScreen.getPlayer();
public void save() {
SharedPreferences sp = getSharedPreferences("gameSave",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("X", player.getX());
editor.putInt("Y", player.getY());
editor.putInt("level", player.getLevel());
editor.putFloat("xp", player.getXp());
}
}
Run Code Online (Sandbox Code Playgroud)
当我在GameScreen中保存时,我的应用程序崩溃了,我得到了这个logcat:
02-20 01:39:31.979: E/AndroidRuntime(1368): FATAL EXCEPTION: Thread-119
02-20 01:39:31.979: E/AndroidRuntime(1368): java.lang.NullPointerException
02-20 01:39:31.979: E/AndroidRuntime(1368): at com.package.game.GameScreen.updateLevelUp(GameScreen.java:364)
Run Code Online (Sandbox Code Playgroud)
线364是线savemanager.save();.我不知道为什么会崩溃我的应用程序.
getSharedPreferences()是一种Context方法.如果save()在一个扩展的类中Context,例如Activity,您不必这样做context.getSharedPreferences(),那么您可以这样做,因为您将其作为"单独的方法".
但是,如果save 不在扩展的类中Context,为了能够调用getSharedPreferences(),它需要Context传递一个变量.这意味着你通过简单地创建一个context变量所做的事情是不够的(并且该代码不应该编译,将会抛出关于如何context未初始化变量的错误).由于Contexts不是使用构造函数创建的,因此您的方法会遇到死胡同.
但是,你很亲密.为了便于说明,您可以创建一个在a中接受Context并执行保存的静态方法.static因为这个方法真的不需要对象实例,所以它可以是自包含的:
public static void save(Context context) {
if (context == null)
throw new RuntimeException ("Context is null, what are you doing?");
SharedPreferences sp = context.getSharedPreferences("gameSave",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("X", player.getX());
editor.putInt("Y", player.getY());
editor.putInt("level", player.getLevel());
editor.putFloat("xp", player.getXp());
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果此方法是类的一部分,例如named StaticUtils,则可以调用save:
Activity:StaticUtils.save(YourActivityClass.this);或StaticUtils.save(this);取决于范围(例如,如果在匿名内部函数内部,您将使用YourActivityClass.this).Fragment: StaticUtils.save(getActivity());BroadcastReceiver: StaticUtils.save(context);View(例如,View传递时onClick()被称为:StaticUtils.save(v.getContext());请记住,您可以在活动中保存的最敏捷的事情是onCreate()在失败之前的任何事情,并且例外应该清楚地表明.
一个简单的演示.没有扩展任何东西,没有花哨的制作Context:
MainActivity.java:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StaticUtils.save(this);
SharedPreferences prefs = getSharedPreferences ("gameSave", Context.MODE_PRIVATE);
System.out.println ("X is " + prefs.getInt ("X",-1));
}
}
Run Code Online (Sandbox Code Playgroud)
StaticUtils.java
public class StaticUtils {
public static void save(Context context) {
if (context == null)
throw new RuntimeException ("Context is null, what are you doing?");
SharedPreferences sp = context.getSharedPreferences("gameSave",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("X", 11);
editor.putInt("Y", 24);
editor.putInt("level", 3);
editor.putFloat("xp", 100);
editor.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14547 次 |
| 最近记录: |