[英]putextra and getextra not passing string to next activity
我有三個活動A,B和C
在我的B活動中,我有一個imageview,當我從活動A到B獲得一個String時,該imageview應該可見。
當我從活動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");
並發布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
語句始終為true。
2種選擇:
1)刪除if語句,因為它始終為true。
2)更改String jst = "Some string to compare"
(對此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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.