putextra 和 getextra 没有将字符串传递给下一个 activity
putextra and getextra not passing string to next activity
我有三个活动 A、B 和 C
在我的 B activity 我有一个图像视图,当我从 activity A 到 B 得到一个字符串时,图像视图应该是可见的。
当我从 activity C 到 B 得到一个字符串时,imageview 应该不可见。
//From activity A
Intent iin= getIntent();
Bundle b = iin.getExtras();
//From Activity C
Intent i2=getIntent();
Bundle abcd=i2.getExtras();
if(b!=null)
{
String j =(String) b.get("arrowvisi");
Toast.makeText(getApplicationContext(), j, Toast.LENGTH_LONG).show();
if(j==b.get("arrowvisi"))
{
img_back.setVisibility(View.VISIBLE);
Toast.makeText(getApplicationContext(), "Operational arrow visible", Toast.LENGTH_LONG).show();
}
else
{
if(abcd!=null)
{
String jst =(String) abcd.get("arrow_val");
if(jst==abcd.get("arrow_val"))
{
img_back.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), "scan dispatch visble", Toast.LENGTH_LONG).show();
}
else
{
//img_back.setVisibility(View.GONE);
System.out.println("from scan dispatch");
Toast.makeText(getApplicationContext(), "scan dispatch not visible", Toast.LENGTH_LONG).show();
}
}
Toast.makeText(getApplicationContext(), "Operational not visible", Toast.LENGTH_LONG).show();
}
}
首先,要比较java中的字符串,需要使用.equals
所以改变
if(j==b.get("arrowvisi"))
至
if(j.equals(b.getString("arrowvisi")))
和
if(jst==abcd.get("arrow_val"))
至
if(jst.equals(abcd.getString("arrow_val")))
其次,你的条件总是为真,因为你总是在比较两个相等的值,即首先在 jst
中获取值,然后比较相同的值。
编辑:解决空指针更改
String j =(String) b.get("arrowvisi");
至
String j = b.getString("arrowvisi");
和
String jst =(String) abcd.get("arrow_val");
至
String jst =abcd.getString("arrow_val");
和post logcat异常。
替换
String j = (String) b.get("arrowvisi");
和
String j = b.getString("arrowvisi");
和
String jst = (String) abcd.get("arrow_val");
和
String jst = abcd.getString("arrow_val");
字符串比较也应该像
j.equals(b.getString("arrowvisi")) // change again
和
jst.equals(abcd.getString("arrow_val")) // change again
所以,最后的答案应该是
//From activity A
Intent iin = getIntent();
Bundle b = iin.getExtras();
//From Activity C
Intent i2 = getIntent();
Bundle abcd = i2.getExtras();
if(b != null){
String j = "String to check"; // Replace content inside "" with your string
Toast.makeText(getApplicationContext(), j, Toast.LENGTH_LONG).show();
if(j.equals(b.getString("arrowvisi"))){
img_back.setVisibility(View.VISIBLE);
Toast.makeText(getApplicationContext(), "Operational arrow visible", Toast.LENGTH_LONG).show();
}else{
if(abcd != null){
String jst = "String to check"; // Replace with string you want to check
if(jst.equals(abcd.getString("arrow_val"))){
img_back.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), "scan dispatch visble", Toast.LENGTH_LONG).show();
}else{
//img_back.setVisibility(View.GONE);
System.out.println("from scan dispatch");
Toast.makeText(getApplicationContext(), "scan dispatch not visible", Toast.LENGTH_LONG).show();
}
}
Toast.makeText(getApplicationContext(), "Operational not visible", Toast.LENGTH_LONG).show();
}
}
另外 注意,做类似
String jst = abcd.getString("arrow_val"));
if(jst.equals(abcd.getString("arrow_val"))) // this will be always true
这将导致 if
语句始终为真。
2 个选项:
1) 删除 if 语句,因为它始终为真。
2) 更改字符串 jst = "Some string to compare"
(更改此),现在在 if 循环
中使用 jst.equals(abcd.getString("arrow_val"))
将 jst
与 getString("arrow_val")
进行比较
改变这个
String j = (String) b.get("arrowvisi");
和
String j = b.getString("arrowvisi");
和
String jst = (String) abcd.get("arrow_val");
和
String jst = abcd.getString("arrow_val");
也把这个放在括号()
b.get("arrowvisi")
abcd.get("arrow_val")
我有三个活动 A、B 和 C
在我的 B activity 我有一个图像视图,当我从 activity A 到 B 得到一个字符串时,图像视图应该是可见的。
当我从 activity C 到 B 得到一个字符串时,imageview 应该不可见。
//From activity A
Intent iin= getIntent();
Bundle b = iin.getExtras();
//From Activity C
Intent i2=getIntent();
Bundle abcd=i2.getExtras();
if(b!=null)
{
String j =(String) b.get("arrowvisi");
Toast.makeText(getApplicationContext(), j, Toast.LENGTH_LONG).show();
if(j==b.get("arrowvisi"))
{
img_back.setVisibility(View.VISIBLE);
Toast.makeText(getApplicationContext(), "Operational arrow visible", Toast.LENGTH_LONG).show();
}
else
{
if(abcd!=null)
{
String jst =(String) abcd.get("arrow_val");
if(jst==abcd.get("arrow_val"))
{
img_back.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), "scan dispatch visble", Toast.LENGTH_LONG).show();
}
else
{
//img_back.setVisibility(View.GONE);
System.out.println("from scan dispatch");
Toast.makeText(getApplicationContext(), "scan dispatch not visible", Toast.LENGTH_LONG).show();
}
}
Toast.makeText(getApplicationContext(), "Operational not visible", Toast.LENGTH_LONG).show();
}
}
首先,要比较java中的字符串,需要使用.equals
所以改变
if(j==b.get("arrowvisi"))
至
if(j.equals(b.getString("arrowvisi")))
和
if(jst==abcd.get("arrow_val"))
至
if(jst.equals(abcd.getString("arrow_val")))
其次,你的条件总是为真,因为你总是在比较两个相等的值,即首先在 jst
中获取值,然后比较相同的值。
编辑:解决空指针更改
String j =(String) b.get("arrowvisi");
至
String j = b.getString("arrowvisi");
和
String jst =(String) abcd.get("arrow_val");
至
String jst =abcd.getString("arrow_val");
和post logcat异常。
替换
String j = (String) b.get("arrowvisi");
和
String j = b.getString("arrowvisi");
和
String jst = (String) abcd.get("arrow_val");
和
String jst = abcd.getString("arrow_val");
字符串比较也应该像
j.equals(b.getString("arrowvisi")) // change again
和
jst.equals(abcd.getString("arrow_val")) // change again
所以,最后的答案应该是
//From activity A
Intent iin = getIntent();
Bundle b = iin.getExtras();
//From Activity C
Intent i2 = getIntent();
Bundle abcd = i2.getExtras();
if(b != null){
String j = "String to check"; // Replace content inside "" with your string
Toast.makeText(getApplicationContext(), j, Toast.LENGTH_LONG).show();
if(j.equals(b.getString("arrowvisi"))){
img_back.setVisibility(View.VISIBLE);
Toast.makeText(getApplicationContext(), "Operational arrow visible", Toast.LENGTH_LONG).show();
}else{
if(abcd != null){
String jst = "String to check"; // Replace with string you want to check
if(jst.equals(abcd.getString("arrow_val"))){
img_back.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), "scan dispatch visble", Toast.LENGTH_LONG).show();
}else{
//img_back.setVisibility(View.GONE);
System.out.println("from scan dispatch");
Toast.makeText(getApplicationContext(), "scan dispatch not visible", Toast.LENGTH_LONG).show();
}
}
Toast.makeText(getApplicationContext(), "Operational not visible", Toast.LENGTH_LONG).show();
}
}
另外 注意,做类似
String jst = abcd.getString("arrow_val"));
if(jst.equals(abcd.getString("arrow_val"))) // this will be always true
这将导致 if
语句始终为真。
2 个选项:
1) 删除 if 语句,因为它始终为真。
2) 更改字符串 jst = "Some string to compare"
(更改此),现在在 if 循环
jst.equals(abcd.getString("arrow_val"))
将 jst
与 getString("arrow_val")
进行比较
改变这个
String j = (String) b.get("arrowvisi");
和
String j = b.getString("arrowvisi");
和
String jst = (String) abcd.get("arrow_val");
和
String jst = abcd.getString("arrow_val");
也把这个放在括号()
b.get("arrowvisi")
abcd.get("arrow_val")