新手-99 2023-02-26 20:21 采纳率: 79.3%
浏览 26
已结题

安卓开发之两个一样的《字符串》,为何在 if 判断里天剑不成立?

**安卓开发之两个一样的《字符串》,为何在 if 判断里天剑不成立?
**

事情是这样的,我有一个项目需要用到shell脚本,常规地用了Runtime.getRuntime().exec()这个方法,并且通过输出流获取到了脚本的echo,并将 echo 的字符串返回。这么说可能不太清楚,举个例子
// shell 脚本
public static final String SHELL_TEST1 = "echo \"ok\"" ;

//执行shell并获取返回值的方法:
    /**
     * @注解 执行shell命令,并获取shell的返回值
     * @param mycmd shell命令
     * TODO 也可以执行.sh脚本文件,只需要输入路径即可*/
    public static String RunCmd1(String mycmd) {
        Process su = null;
        // 定义shell返回值
        String result = null;
        try {
            su = Runtime.getRuntime().exec("su");
            DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());
            outputStream.writeBytes(mycmd + "\n");
            outputStream.flush();

            outputStream.writeBytes("exit\n");
            outputStream.flush();

            su.waitFor();

            // 获取shell返回流
            BufferedReader br = new BufferedReader(new InputStreamReader(su.getInputStream()));
            StringBuffer sb2 = new StringBuffer();
            String line;
            while ((line = br.readLine()) != null) {
                sb2.append(line).append("\n");
                System.out.println("==============================循环体中" + result);
            }
            result = sb2.toString();
            // 关闭输入流
            br.close();
            System.out.println("==============================" + result);

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        String s = result.toString();
        return s;

    }


上面定义了shell语句和执行shell的方法,下面在别的类中调用

//在某个按钮的点击事件中调用,假设shell脚本是耗时操作,比如复制文件,所以用到了线程通信
public onClick(View  v){
    Handler handler = new Handler(Looper.myLooper()){
        @Override
        public void handleMessage(@NonNull Message msg) {
             super.handleMessage(msg);
             if (msg.what == 666){
                  String isOk = (String) msg.obj;
                  System.out.println("=========================================handler接收的返回值为:" + isOk);
                     if (isOk.equals("1")) {
                      ToastUtil.out(context,"成功").show();
                     } else {
                               System.out.println("=========================================handler判断条件不成立" );
                                }
             }
    };
     new Thread(() -> {
           Message msg = new Message();
            msg.what = 666;
               String s = RunCmd1(SHELL_TEST1 )System.out.println("====================================================util调用cmd命令得到的返回值为:" + runCmd1);
               msg.obj = runCmd1;
              handler.sendMessage(msg);
       }).start();
  
}

,运行到手机上,Logcat 显示:

img

明明isOk 和 "1"就是相等的,为什么程序走到else 里面去了呢?百思不得其解!换过编码,重启过,都没用。有遇到过这种情况的吗?

  • 写回答

1条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-02-26 20:48
    关注

    你打印一下 isOK的长度, 是不是多了空格 或者 空白字符 【比如换行等等】

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月26日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持