java - 在 onDrag 函数中保存坐标时出现问题

标签 java android drag-and-drop sharedpreferences coordinates

我正在编写一个应用程序,用户可以在其中购买建筑物(图像按钮)并使用拖放 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);

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

日志猫:

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

关于java - 在 onDrag 函数中保存坐标时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924707/

相关文章:

android - 在 ImageView 边界上拖动时删除 map 标记

android - 如何在 Android 中停止来自 BroadcastReceiver 的服务?

javascript - JQuery 拖放在 Firefox 中不起作用,但在 chrome 和 IE 中起作用

javascript - 2个自调用的javascript函数运行

java - HTTP/HTTPS 客户端,HTTPS 请求上的 "connection reset"

Java 如何模拟java中的对象和静态方法?

java - 如何在 java 中解析单词创建的特殊字符

c# - 单击 ListView 中的复选框时隐藏键盘

python - Python拖放损坏

java - 使用 JGit 按分支或提交 ID check out Git 存储库