我正在开发一个Android应用程序。我的第一个活动中有一个字符串。我使用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语句。
你知道为什么会这样吗?我找不到任何理由。我现在真的需要帮助。
任何帮助都将不胜感激。
答案 0 :(得分: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
而不是创建变量。它可能不会对此产生任何影响,但取决于您使用Context
的内容可能会导致问题,因为您使用的是Application Context
而不是Activity Context
...请注意。< / p>
答案 1 :(得分:1)
尝试
if(text.equals("abc")){
toast.show();
}
答案 2 :(得分:0)
== 测试参考相等。
.equals()测试值相等
它与等于
一起使用的java字符串比较if(text.equals("abc")){
toast.show();
}
但我会推荐
if("abc".equals(text)){
toast.show();
}
因为如果text为null,则会抛出Exception,但第二次不会自动处理.equals(object)
如果你不打扰这个案例,也可以这样做
"abc".equalsIgnoreCase(text)