0

我正在开始一个意图,其中活动开始取决于设备是组所有者还是只是加入的对等方。目前,instructIntent 尚未初始化。我应该像 Eclipse 建议的那样让它为空吗?还是有一些更专业的 Java 代码风格的处理方式?

Intent instructIntent;
if (info.groupFormed && info.isGroupOwner) {
    Log.d(WiFiDirectActivity.TAG, "DeviceDetailFragment_onCreateView: btn_ready pressed on host");
    instructIntent = new Intent(getActivity(), LeaderActivity.class);
} else if (info.groupFormed) {
    Log.d(WiFiDirectActivity.TAG, "DeviceDetailFragment_onCreateView: btn_ready pressed on client");
    instructIntent = new Intent(getActivity(), MusicianActivity.class);
}

instructIntent.putExtra(Intent.EXTRA_TEXT, "Play");
instructIntent.putExtra(MusicService.EXTRAS_GROUP_OWNER_ADDRESS, info.groupOwnerAddress.getHostAddress());
instructIntent.putExtra(MusicService.EXTRAS_GROUP_OWNER_PORT, 8080);
startActivity(instructIntent);
4

2 回答 2

1

将其设为 null 将无济于事。真正的问题是如果 info.groupFormed 为假,那么 instructIntent 中将没有有效值。但是即使您将其初始化为 null,它仍然无效。这意味着当您在其中调用 putExtra 时,它将引发异常。更好的方法是:

if(info.groupFormed){
    if(info.isGroupOwner){
        instructIntent = new Intent(getActivity(), LeaderActivity.class);
    }
    else{
        instructIntent = new Intent(getActivity(), MusicianActivity.class);
    }
    //all of your putExtra and startIntent calls here
}

请注意,所有转到 put 和 start 调用意图的分支都将创建一个新的意图。这样,您将不会有 null 或未初始化的变量尝试调用成员函数。

于 2013-02-13T19:05:03.083 回答
-1

任何在 java 中声明的变量在使用前都应该被赋值。在上面给出的代码中,如果 if 和 else if 条件都不满足,我们可能不会为 instructIntent 变量分配任何值。

因此,您必须将 instructIntent 初始化为 null,如下所示。

Intent instructIntent = null;
于 2013-02-13T19:09:56.163 回答