在 Java 中传递引用

2024-01-07

我有这个纸牌游戏,我将所有玩家存储在一个List。 为了找出我想与之合作的玩家,每个玩家都有一个Card(我可以得到卡名),一个name(我可以得到玩家的名字),但为了保持唯一性,每个玩家都有一个ID.

现在,在我的开始onCreate()方法,我找到并将列表中的玩家分配给玩家,Player clairvoyant:

public void initializeCharacters() {
    for (Player player : players) {
        if (player.getCardName().equals("Clairvoyant")) {
            clairvoyant = player;
        }
}

游戏在夜间和白天之间切换。轮到千里眼的时间是晚上,我用一个开关来确定什么时候轮到谁。

现在,在开始千里眼的回合之前,我检查他是否还活着,如果是的话,我只是跳过他的回合:

case 2:
                    clairvoyant(); // Clairvoyant's turn
                    Toast.makeText(Game.this, String.valueOf(clairvoyant.getLifeStatus()), Toast.LENGTH_SHORT).show();
                    if(clairvoyant.getLifeStatus()) {
                    /* --- Let him choose ---*/
                        Intent intent = new Intent(this, ListPlayersClairvoyant.class);
                        Bundle bundle = new Bundle();
                        bundle.putSerializable("PLAYERS", (Serializable) players);
                        intent.putExtras(bundle);
                        startActivityForResult(intent, REQUEST_CLAIRVOYANT);
                    /* --------------------- */
                    }
                    nightInsideCounter++;
                    if(medium == null) {
                        nightInsideCounter++;
                    }
                    if(guard == null) {
                        nightInsideCounter++;
                    }
                    break;

然而,我添加了 Toast 来查看何时杀死玩家是否还活着,但即使列表中搜索的玩家被杀死,之前创建的千里眼玩家也不会被杀死。
所以基本上,列表中的玩家凭借千里眼卡,is dead; but 透视玩家,在开始轮到之前初始化以获取对它的引用,还活着!

我不明白为什么。我有什么遗漏的吗?我是否已经做了参考?在这种情况下,我应该如何创建对它的引用?


EDIT:

现在一切正常,我已经在 Player 类和 Card 类上实现了 Parcelable 接口。 问题是,当我从 ListPlayersVote Activity 到达游戏(主要活动)的意图时,应用程序崩溃并收到此错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.lang.Object.toString()” 在 android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401)

[...] // 许多其他链接,已跳过

这是一个简单的 NullPointer 异常,但我没有得到错误代码的链接,而是得到了其他脚本的所有其他链接(可能已经制作了,不是我做的),这让我陷入困境,我该如何修复如果我没有得到任何指向我的代码的链接,会出现错误吗?


资源

投票活动 http://pastebin.com/yryzgzBq

玩家等级 http://pastebin.com/B5GTSnEF

我如何检索传递的 ArrayLists 并检查它们的值(这是 StartActivityForResult() ):

    /* ------------------------------------------ */
    /* ---------- If they want to VOTE ---------- */
    /* ------------------------------------------ */
    if(requestCode == REQUEST_VOTE) {

        if(resultCode == Activity.RESULT_OK) {
            // Get the Player clicked
            ArrayList<Player> highestList = data.getParcelableArrayListExtra("HIGHEST");
            ArrayList<Player> highestList1 = data.getParcelableArrayListExtra("HIGHEST1");
            System.out.println("[5] The players of the first list are " + highestList.size() + ".");
            System.out.println("[6] The players of the second list are " + highestList1.size() + ".");

            // Add the most voted players to a signle List, highest
                highest.addAll(highestList);
                highestList.clear();

                highest.addAll(highestList1);
                highestList1.clear();

            // Write the names in chat
            write("Il villaggio ha i propri sospettati:");
            for (Player player : highest){
                write(player.getName());
            }
            System.out.println("[7] The players chosen are " + highest.size() + ".");
            highest.clear();

        } else if (resultCode == Activity.RESULT_CANCELED) {
            // Some stuff that will happen if there's no result
        }

    }

看来您正在寻找weak参考 http://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html:如果不存在对该对象的其他引用,则弱引用也会丢失。看参考 http://docs.oracle.com/javase/8/docs/api/java/lang/ref/Reference.html too.

WeakReference<Player> clairvoyant;

// Initialisation of clairvoyant from players:
// So do this whenever players is filled.
for (Player player : players) {
    if (player.getCardName().equals("Clairvoyant")) {
        clairvoyant = new WeakReference<>(player);
    }
}

// Everywhere where clairvoyant is inspected:
Player player = clairvoyant.get();
if (player != null) {
    // There is a clairvoyant player:
    ,,,
}

但对 Android 的 java 行为没有经验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中传递引用 的相关文章

  • invalidateOptionsMenu 在片段中不起作用

    显示或隐藏项目ActionBar根据文本中是否有文本EditText or not 所以 我做了以下事情 public class NounSearch extends android app Fragment EditText seach
  • 如何在 Android 上的 HttpPost 中发送 unicode 字符

    我试图在我的应用程序中允许多语言支持 这会发出 HTTP post 来上传新消息 我需要做什么才能支持日语和其他非拉丁语语言 我的代码目前看起来像这样 note the msg string is a JSON message by the
  • 在 Android 中使用 iText 读取或打开 PDF 文件

    我是 Android 应用程序开发新手 使用 iText 我完成了 PDF 创建并在创建的文件上写入 现在我想阅读该 PDF 文件 如何使用 iText 打开或阅读 PDF 文件 例子将是可观的 那么提前 哪个是渲染 PDF 文件的最佳库
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 如何从SurfaceView绘制到Canvas?

    我正在尝试做简单的画家 问题是Android看起来有三个独立的Canvas并给我它来顺序绘制 我用以下方式制作了用户界面SurfaceView 把霍尔德从中拿走 Override protected void onCreate Bundle
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 不兼容的类型:在 java netbeans 中对象无法转换为 String

    我试图在我的项目中使用对象数组 但出现错误 incompatible types Object cannot be converted to String 在这一行 ST1 new String emt1 emt2 emt3 emt4 现在
  • 如何在android中录制音频时暂停背景音乐

    我正在 Android 中开发一个音频记录应用程序 因此 如果设备音乐播放器中已播放任何背景音乐 则应在开始录制之前暂停该背景音乐 并且每当录制停止或暂停时 背景音乐都应恢复 播放录制的音频时也应该如此 有人可以帮我解决这个问题吗 提前致谢
  • 无法在 Android 模拟器中安装 apk

    我正在尝试通过 adb shell 在 ICS 模拟器中安装 apk 从一个站点下载 但出现以下错误 失败 INSTALL FAILED UID CHANGED 可能是什么问题 只需 rm r 有问题的数据目录即可 如果您在安装时遇到此错误
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 如何在新标签 android webview 中打开链接? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经使用 webview 创建了一个 android 应用程序来显示我的网站 我什至想添加在新选项卡中打开链接的功能 但我找不到任何
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • Google Android Drive api 在已安装版本上登录失败

    我开发了一个使用 GoogleDrive api 的 Android 应用程序 当处于调试状态或运行调试版本时 应用程序 工作正常 并正确验证附加的谷歌帐户 等 当我构建发行版本时 使用我的签名密钥 并且 安装apk文件 当我运行时 Goo
  • Android:如何通过右侧的十字按钮清除EditText

    我创建了一个EditText用于搜索 左侧包含搜索图标 右侧包含图标
  • 如何使 tablayout 文本大小相等?

    这就是我所做的 我为文本创建了一种样式
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • OpenGL ES 2.0 屏幕闪烁

    我面临着一个大问题 我正在使用带有 Android 4 0 3 的 Transformer tf101 选项卡 我的应用程序使用自定义 OpenGL ES 2 0 表面 我正在用纹理渲染多个平面 该纹理大约发生变化 每秒 20 次 并通过传
  • 在 Android 中更新到 API 26 时,清单合并失败并出现多个错误

    我尝试使用 API 26 更新我的 gradle 安卓工作室2 3 3 但我在编译项目时遇到以下错误 这是我收到的错误的屏幕截图 应用级别build gradle Top level build file where you can add

随机推荐

  • Pycharm 不接受“list[Example]”作为项目列表的类型提示[重复]

    这个问题在这里已经有答案了 我在 PyCharm 中发现了一个奇怪的类型 Example是我自己的班级 但我想这并不那么重要 因为 IDE 正在抱怨list类型没有定义 getitem 这是不正确的方法 我想知道这是一个错误还是我以错误的方
  • Magento - 对自定义报价总计字段应用税

    我为 Magento 创建了一个附加费模块 它在报价中添加了一个自定义总计字段 附加费含税输入到 Magento 中 我已成功获取将附加费添加到报价中的模块 并且结帐页面上的总计是正确的 当我尝试对附加费征税 以便将其包含并显示在结账页面的
  • jQuery Ajax Post 与数据

    当使用某些参数单击按钮时 我尝试调用 PHP 文件 它一直执行到 jsfile js 中的警报语句为止 之后ajax部分没有被执行 帮助我 主要 html
  • 当应用程序在后台运行时获取 GPS 位置更新

    我有一个 Android 应用程序 可以跟踪客户位置并每 10 秒发送一次位置 但是 在 android O 中 位置更新每小时会获得几次 正如有关 android O 中 GPS 位置更新限制的文档中所述 无论如何 为了克服这个问题 我使
  • C/C++ MPI 加速未达到预期

    我正在尝试编写一个 MPI 应用程序来通过计算机集群加速数学算法 但在此之前我正在做某种基准测试 但最初的结果并不像预期的那么好 测试应用程序在 4 核时具有线性加速 但 5 6 核并未加速应用程序 我正在使用 Odroid N2 平台进行
  • 在 Sympy.mpmath.plot 中更改图形大小

    我希望这个问题不是太初级 我已经广泛搜索了解决方案 但尚未找到 我最近开始使用 Jupyter Notebook 和 Sympy 在微积分 II 课上做笔记和做作业 这真是一个巨大的好处 然而 我唯一的问题是我无法弄清楚如何配置绘图的大小
  • 什么是堆栈溢出?

    什么是堆栈溢出错误 它可能出现在什么类型的程序 编程语言中 它不太可能出现在 Web 应用程序代码中吗 From 维基百科 http en wikipedia org wiki Stack overflow 在软件中 会发生堆栈溢出 当内存
  • 如果一个代理关闭,流应用程序中的 KafkaStream EXACTLY_ONCE 会导致重新平衡失败

    我有一个 Kafka 流应用程序 其中 kafka streams 和 kafka clients 均为 2 4 0 具有以下配置 properties put StreamsConfig BOOTSTRAP SERVERS CONFIG
  • jquery mouseover 和 mouseout 错误

    当我滚动一个元素 以查看包含该元素的总体数据 时 我试图获得某些内容的预览 并且当我推出时 一切都恢复原样 问题是 当我快速移动鼠标光标时 有时鼠标移出方法不会发生 并且数据保持更新 但我不希望出现这种情况 知道我该怎么做吗 documen
  • 垃圾收集期间崩溃的原因

    一段时间以来 我一直在努力解决 C 应用程序崩溃的问题 该应用程序也使用相当多的 C CLI 模块 这些模块主要是本地库的包装器来访问设备驱动程序 崩溃并不总是很容易重现 但我能够收集六个崩溃转储 这些崩溃转储表明程序总是在垃圾收集期间因访
  • ipsec.py 找不到属性 IPPROTO_IP 和 socket.IPPROTO_IP

    我安装了 python 2 6 的模块 scapy 当我导入此模块时 我收到此警告 警告 无法导入层 ipsec 模块 对象没有属性 IPPROTO AH 我查看了套接字属性 但没有找到 IPPROTO AH 属性 此外 我尝试编辑模块 i
  • 如何在shell脚本中从fork子进程获取PID

    我相信我可以从父进程派生出 10 个子进程 下面是我的代码 bin sh fpfunction n 1 while n lt 20 do echo Hello World n times sleep 2 echo Hello World2
  • Android Studio Windows:调试器进程已完成,退出代码为 -1073741515 (0xC0000135)

    我的应用程序中有本机代码和 Java 因此我需要能够调试 Java 和本机代码 升级到 Android Studio Bumblebee 后 2021 1 1 补丁 2 我无法再在启用本机调试的情况下调试我的应用程序 如果 调试类型 设置为
  • 添加 DOM 元素,正确的方法是什么?

    这个问题可能很愚蠢 或者很基本 有人可以解释一下添加 DOM 元素的最佳方法是什么吗 我们有两种添加 DOM 元素的方法 设想 需要添加 strong Hi strong 在现有的 div div 通过编辑其中的 HTML document
  • 如何将图像从 Applet 传递到 JSF 支持 bean

    我正在使用一个 Web 应用程序 其中有一个 Java Applet 可以将 wacom 设备中的图像捕获到RenderedImage目的 applet 本身嵌入到 JSF 2 0 页面中 我需要传递创建的RenderedImage从 Ap
  • POD 类已初始化,并已初始化放置新默认值?

    如果我使用新的放置来初始化 POD 类 我可以假设内存将默认初始化 为零 吗 这个资源 http www fnal gov docs working groups fpcltf Pkg ISOcxx doc POD html明确指出 如果您
  • 将表重命名为 'NOW() + old_table_name'

    是否可以以某种方式使用 NOW 函数或类似的 MYSQL rename table 函数 我需要这个的原因是因为我们不喜欢立即删除旧表 而是先重命名 然后重命名为 old 日期表已停止使用 table name 因此 当我们实际删除它时 我
  • 错误:提交请求后无法执行此操作

    我写过关于httpwebrequest and httpwebresponse 我需要将数据发送到服务器 但收到此异常 提交请求后无法执行此操作 看下面的代码 HttpWebRequest request HttpWebRequest We
  • 在 Laravel Eloquent ORM 中处理 Mysql Spatial 数据类型

    如何在 eloquent ORM 中处理 mysql 空间数据类型 这包括如何创建迁移 插入空间数据和执行空间查询 如果没有实际的解决方案 是否有任何解决方法 我不久前实施的一个解决方法是在模型上设置纬度和经度字段 并进行以下验证 请参阅验
  • 在 Java 中传递引用

    我有这个纸牌游戏 我将所有玩家存储在一个List 为了找出我想与之合作的玩家 每个玩家都有一个Card 我可以得到卡名 一个name 我可以得到玩家的名字 但为了保持唯一性 每个玩家都有一个ID 现在 在我的开始onCreate 方法 我找