4

我整天都在 if 语句中遇到布尔问题,现在它真的开始让我恼火了!!我在这里查看了其他 Android 线程,但解决方案似乎不起作用。

我的代码是这样开始的:

public class MainActivity extends Activity 
{
public static boolean isSignedIn = false;       

public final static String USERNAME_MESSAGE = "com.example.libnoise.MESSAGE";
Button btnSignIn;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);       


    btnSignIn = (Button) findViewById(R.id.btnSignIn);
    Intent intent = getIntent();
    String message = intent.getStringExtra(PlayZone.USERNAME_MESSAGE); 

    if(isSignedIn == false))
    {
   btnSignIn.setText("SignIn");
    }
    else
    {       
         btnSignIn.setText(message);
    }        
}

然后我有一个想法使它不像其他语言,我只需要一个“=”符号所以我有它:

    if(isSignedIn = false)
    {
   btnSignIn.setText("SignIn");
    }
    else
    {       
         btnSignIn.setText(message);
    }  

那没有用,那是我开始上网的时候,在这里找到以前的帖子后,将其更改为以下内容:

    if("false".equals(isSignedIn))
    {
   btnSignIn.setText("SignIn");
    }
    else
    {       
         btnSignIn.setText(message);
    }  

现在这首先对我来说看起来不正确,但希望它会起作用,但它没有。

由于这是它首先加载的 MainActivity,但是自从我添加了所有这些之后,应用程序在我取出 if 语句时它甚至会在加载之前崩溃,它按预期工作。

有任何想法吗?

4

4 回答 4

4

if (isSignedIn == false)

是完全正确的。(你也可以写if (!isSignedIn),但这只是风格问题。)

请注意,由于您从不更改 的值isSignedIn(至少在您向我们展示的代码中没有更改),因此它将始终为false.

于 2013-01-23T16:35:04.680 回答
3

如果带有布尔值的语句与您在 Java 中的执行方式相同,那么==是比较的正确方法

您的代码中的问题是额外的括号

if (isSignedIn == false))

于 2013-01-23T16:38:17.603 回答
3

我想你可以简单地使用

if(!isSignedIn)
{
  btnSignIn.setText("SignIn");
}
else
{       
  btnSignIn.setText(message);
}        

您遵循的方式也是正确的,除了您在条件中使用了额外的括号外,我没有发现任何错误if(isSignedIn == false))

于 2013-01-23T16:39:09.360 回答
2

只是为了偏离问题,但指出可能是您的问题,您的空指针可能是因为您正在访问一个可能尚未准备好设置文本的 UI 对象。

虽然某些 API 版本可以很好地处理您正在做的事情,但我发现许多设备/API 组合根本没有准备好从 xml 中的内容到 onStart 进行任何更改。一般的指导是在 onCreate 中加载数据,但直到 onStart才开始做任何事情。

于 2013-01-23T18:04:30.053 回答