我正在编写一个应用程序,用户可以在其中购买建筑物(图像按钮)并使用拖放API自由移动建筑物。我正在尝试做的是保存建筑物的坐标,以便可以将它们加载回原来的位置。我目前正在尝试使用共享的首选项,但是在onDrag函数中尝试使用共享的首选项时似乎工作得不太好。任何想法做到这一点的最佳方法是什么?

这是类中的代码,应获取要使用的坐标(在runGraphics类中):

SharedPreferences prefs = getSharedPreferences("Coordinates", MODE_PRIVATE);
colonyHutX = prefs.getInt("ColonyHutX", 0);
colonyHutY = prefs.getInt("ColonyHutY", 0);
Toast.makeText(getApplicationContext(), "X: " + colonyHutX + " Y: " + colonyHutY, Toast.LENGTH_SHORT).show();


这是保存坐标的代码(位于ColonyHutDrag类的onDrag函数中):

SharedPreferences prefs = getSharedPreferences("Coordinates", MODE_PRIVATE);
Editor edit = prefs.edit();
edit.putInt("ColonyHutX", x);
edit.putInt("ColonyHutY", y);
edit.commit();


我收到的错误是由于类中没有某种setContentView导致的,但是由于这只是一个实现onDrag函数的类,因此不需要setContentView。如果您有任何更好的解决方法或如何解决此问题,请让我知道。

谢谢你们。

编辑:

我试图通过执行以下操作来解决我的问题:

Context context = getApplicationContext();
prefs = context.getSharedPreferences("Coordinates", Context.MODE_PRIVATE);


但是我仍然遇到同样的错误。

LogCat:

07-24 15:23:59.611: E/AndroidRuntime(29287): FATAL EXCEPTION: main
07-24 15:23:59.611: E/AndroidRuntime(29287): Process: com.project.llb, PID: 29287
07-24 15:23:59.611: E/AndroidRuntime(29287): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at com.twentytwentythree.sab.ColonyHutDrag.onDrag(ColonyHutDrag.java:48)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.View.dispatchDragEvent(View.java:17635)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1300)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1286)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1286)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1286)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1286)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1286)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewRootImpl.handleDragEvent(ViewRootImpl.java:5338)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewRootImpl.access$1100(ViewRootImpl.java:118)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3487)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.os.Handler.dispatchMessage(Handler.java:102)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.os.Looper.loop(Looper.java:157)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at android.app.ActivityThread.main(ActivityThread.java:5872)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at java.lang.reflect.Method.invoke(Native Method)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852)
07-24 15:23:59.611: E/AndroidRuntime(29287):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:668)

最佳答案

如果不使用Activity,则需要在某些上下文中调用getSharedPreferences

10-06 07:25