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"))jstgetString("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")