在这种情况下如何初始化变量?

时间:2013-02-13 19:00:30

标签: java android eclipse sockets p2p

我正在开始一个活动开始的意图,取决于设备是组所有者还是加入的同伴。目前,instructIntent尚未初始化。我建议将其设为null吗?或者是否有更专业的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);

2 个答案:

答案 0 :(得分:1)

将其设为null无济于事。真正的问题是如果info.groupFormed为false,则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
}

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

答案 1 :(得分:-1)

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

所以你必须将instructIntent初始化为null,如下所示。

Intent instructIntent = null;