【问题标题】:Intent does not work in case of if else在 if else 的情况下 Intent 不起作用
【发布时间】:2016-04-25 07:28:54
【问题描述】:

这是我的示例代码:

String checkin = imageUpload.getStatus();
if (checkin.equals("1")) {
    Toast.makeText(FullImageActivity.this, name+" "+ "Checked In", Toast.LENGTH_LONG).show();
    Intent i = new Intent(FullImageActivity.this, MainActivity.class);
    startActivity(i);
    //openCamera.setText("CheckOut");
} else if (checkin.equals("0")){
    Toast.makeText(getApplicationContext(), name + " " + "Checked Out", Toast.LENGTH_LONG).show();
    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
}

第一个 if 工作正常,但第二个不是。第二阶段没有活动变化。请在这里给我一个想法。

【问题讨论】:

  • 试试 checkin.equalsIgnoreCase("0")
  • equalsIgnorCase 在字符串数字的情况下无关紧要
  • 第二种情况为什么要用getApplicationContext()?
  • 如果您在第二种情况下要吐司,那么Intent 不可能不工作。
  • 你有没有想过checkin从来都不是0?做个Log来检查一下,可能代码的错误实现在某处之前......

标签: java android android-intent


【解决方案1】:

除了这里的答案,似乎这个问题是由多个问题组成的。正如这里的一些人指出要使用FullImageActivity.this 而不是getApplicationContext(),我的假设是它不是正确的rebuild。所以对于遇到同样问题的每个人:在某些设备上(例如华为 Ascend mate 7),Android Studio 在正确更新后不会安装新版本,尽管它在Run 选项卡中显示了这一点。

在某些代码更改后进行更新的最佳方式是从设备上卸载、清理项目并重新安装您的应用。

所以,这个答案不是一个代码示例(关于上下文的这部分已经说过),而是重要并解决了提问者的问题。

【讨论】:

    【解决方案2】:

    所以尝试在 Switch case 中使用它:

       int checkin = Integer.parseInt(imageUpload.getStatus());
                    switch(checkin) 
                     {
                     case 1:
                        Toast.makeText(FullImageActivity.this, name+" "+ "Checked In", Toast.LENGTH_LONG).show();
                        Intent i = new Intent(FullImageActivity.this, Activiy_1.class);
                        startActivity(i);
                        //openCamera.setText("CheckOut");
                        break;
                    case 0:    
                        Toast.makeText(FullImageActivity.this, name + " " + "Checked Out", Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(getApplicationContext(), Activiy_0.class);
                        startActivity(intent);''
                        break;
                    default:
                        //default methods
    
                    }
    

    希望这对你有用....

    已编辑 ::

    如果字符串有效,那么

     String checkin = imageUpload.getStatus();
                    switch(checkin) 
                     {
                     case "1":
                        Toast.makeText(FullImageActivity.this, name+" "+ "Checked In", Toast.LENGTH_LONG).show();
                        Intent i = new Intent(getActivity().this, MainActivity.class);
                        startActivity(i);
                        //openCamera.setText("CheckOut");
                        break;
                    case "0":    
                        Toast.makeText(getApplicationContext(), name + " " + "Checked Out", Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(getActivity().this, MainActivity.class);
                        startActivity(intent);''
                        break;
                    default:
                        //default methods
    
                    }
    

    【讨论】:

    • 我已将字符串解析为整数 int checkin = Integer.parseInt(imageUpload.getStatus());
    • 从 Android 支持的 Java 7 开始,您可以直接在 switch case 中比较字符串。见docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html(该示例在该页面上大约三页,抱歉我没有直接链接)
    【解决方案3】:

    这行代码对我有用。 我们不需要为 if else 创建两个意图。只需创建一个并在 if else 之后调用 startactivity。 这就对了。

    ImageUpload imageUpload = response.body();
        Intent i = new Intent(FullImageActivity.this, MainActivity.class);
        String checkin = imageUpload.getStatus();
        if (checkin.equals("1")) {
        Toast.makeText(FullImageActivity.this, name+" "+ "Checked In", Toast.LENGTH_LONG).show();
             } else {
        Toast.makeText(FullImageActivity.this, name + " " + "Checked Out", Toast.LENGTH_LONG).show();
                   }
    
      startActivity(i);
    

    【讨论】:

    • 此代码对您的工作频率与您测试的一样多(在遵循@Opiatefuchs 的建议之后),但是 Stefan Branczyk 是正确的关于测试所有可能的返回代码是否在安全的一面。无论如何,对我来说,这里要学到的教训不是关于代码:你的问题似乎是由安装新版本的应用程序时的设备/模拟器行为引起的(-->“在这里完全清理和构建工作”)。我真的认为这应该是答案的一部分。
    【解决方案4】:

    假设 imageUpload 是一个异步任务实例,您忘记测试 PENDING Status。

    所以最终的结果应该是这样的:

    String message = "";
    String checkin = imageUpload.getStatus();
    switch(checkin) {
          case Status.FINISHED:
                 message = "Checked In";
                 break;
           case Status.RUNNING:    
                 message = "Checked Out";
                 break;
           case Status.PENDING:    
                 message = "Trying";
                 break;
            default:
                 message = "Arghhhh";  
     }
    
     Toast.makeText(FullImageActivity.this, name + " " + message,  Toast.LENGTH_LONG).show();
     Intent i = new Intent(FullImageActivity.this, Activiy_1.class);
     startActivity(i);
    
    // You'll have to test this yourself. I didn't test it. 
    

    理想情况下,状态字符串最好使用静态最终变量,因为它们永远不会改变,这样您就不必记住它们的值的含义。

    另外,如果你真的启动同一个 Activity,无论发生什么,那都是重复的代码,你可以在 switch 语句之外做那部分。

    显示 Toast 也是如此。在我看来,只有 Toast 的内容发生了变化,所以只有该内容需要在 switch 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      相关资源
      最近更新 更多