0

我正在开发一个安卓应用程序。我的第一个活动中有一个字符串。我使用intent.putExtra()将该字符串传递给我在第一个活动中开始的第二个活动。以下是活动代码的相关部分:

第一个活动

final ListView lv = (ListView) findViewById(R.id.listView1);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
        String selectedFromList = (lv.getItemAtPosition(arg2).toString());

        Intent content_umre_Intent = new Intent("com.uygulama.hacc.ContentActivity");
        content_umre_Intent.putExtra("key", selectedFromList);
        startActivity(content_umre_Intent);
    }
 });

第二次活动

Context context = getApplicationContext();                      
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
String text = getIntent().getStringExtra("key").toString();

if(text=="abc"){
    toast.show();
}

这里有一些古玩。我把toast.show()if 语句放在外面,我看到它等于“abc”。

然而,即使变量text完全等于“abc”,它也不会进入 if 语句。

你知道为什么会这样吗?我找不到任何理由。我现在真的需要帮助。

任何帮助,将不胜感激。

4

3 回答 3

2

没什么太奇怪的...改变

if(text=="abc"){

if("abc".equals(text)){

比较时Strings==将比较它们是否引用相同的对象。您需要.equals()比较它们是否具有相同的值。

你可以这样做

if(text.equals("abc")){

但我发布的第一种方式将防止NPE.

无关

为什么你有toString()一个String价值?

String text = getIntent().getStringExtra("key").toString();

此外,如果您在内部类或侦听器内部Activity而不是内部类或侦听器内部,那么您可以使用this您的Context而不是创建变量。它可能不会在这里造成任何伤害,但取决于您使用的Contextfor 它可能会导致问题,因为您使用的是Application Context而不是Activity Context......请注意。

于 2013-09-23T21:59:20.720 回答
1

尝试

if(text.equals("abc")){
    toast.show();
}
于 2013-09-23T21:59:25.283 回答
0

==测试引用相等性。

.equals()测试值相等

它是一个java字符串比较,它与equals一起使用

if(text.equals("abc")){
    toast.show();
}

但我会推荐

if("abc".equals(text)){
    toast.show();
}

因为如果 text 是 null 首先会抛出异常,但第二个不会它会自动处理.equals(object)

如果你不关心这个案子,你也可以这样做

"abc".equalsIgnoreCase(text)
于 2013-09-23T22:03:04.800 回答