请问诸位 Android 开发大佬, EditText 的 ReplacementTransformationMethod 有什么办法绕过去 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chenyu8674
V2EX    Android

请问诸位 Android 开发大佬, EditText 的 ReplacementTransformationMethod 有什么办法绕过去

  •  
  •   chenyu8674 2020-09-15 13:01:55 +08:00 11619 次点击
    这是一个创建于 1856 天前的主题,其中的信息可能已经有所发展或是发生改变。
    接口需以大写字母入参,APP 中对 EditText 使用 ReplacementTransformationMethod 进行了强制大写转换,提时使用 getText()获取内容,但项目上线后发现极少数请求的入参依然是小写字母

    虽然后台有对应并不影响业务,也在 APP 中提交时加了 toUpperCase 处理,但没想明白 ReplacementTransformationMethod 是怎么被绕过的,在几十台测试机上试过各种骚操作也再现不出来
    第 1 条附言    2020-09-15 14:40:16 +08:00
    附代码

    public static class AllCapTransformationMethod extends ReplacementTransformationMethod {
    private char[] lower = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
    private char[] upper = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
    private boolean allUpper;

    public AllCapTransformationMethod(boolean needUpper) {
    this.allUpper = needUpper;
    }

    protected char[] getOriginal() {
    if (allUpper) {
    return lower;
    } else {
    return upper;
    }
    }

    protected char[] getReplacement() {
    if (allUpper) {
    return upper;
    } else {
    return lower;
    }
    }
    }

    使用(项目中不含 needUpper 为 false 的调用):
    editText.setTransformationMethod(new AllCapTransformationMethod(true));
    第 2 条附言    2020-09-16 11:15:26 +08:00
    http://web.mit.edu/afs.new/sipb/project/android/docs/reference/android/widget/TextView.html#setTransformationMethod(android.text.method.TransformationMethod)

    public final void setTransformationMethod (TransformationMethod method)
    Added in API level 1
    Sets the transformation that is applied to the text that this TextView is displaying.

    setTransformationMethod 只影响显示内容
    12 条回复    2020-09-22 10:11:19 +08:00
    Lin0936
        1
    Lin0936  
       2020-09-15 13:11:11 +08:00
    复制粘贴?
    300
        2
    300  
       2020-09-15 13:15:01 +08:00 via Android
    直接扒接口了?
    chenyu8674
        3
    chenyu8674  
    OP
       2020-09-15 13:54:13 +08:00
    @Lin0936 #1 自己测试时复制粘贴依然是大写

    @winterbells #2 给合作单位的人员使用的,应该不会有人扒接口
    cczhrd
        4
    cczhrd  
       2020-09-15 14:15:19 +08:00
    提交时加了 toUpperCase 处理 还能发现入参依然是小写字母?
    kop1989
        5
    kop1989  
       2020-09-15 14:25:49 +08:00
    稍微看了下源码,感觉逻辑上不太能导致无效(也有可能是我没理解其中奥妙)。
    会不会是部分手机型号 /系统版本的问题?或者是出问题的输入值有没有什么规律?再或者是 getReplacement 这个实现本身程序的问题?
    chenyu8674
        6
    chenyu8674  
    OP
       2020-09-15 14:35:50 +08:00
    @cczhrd #4 toUpperCase 是发现问题后加上的,不然也不会定位到 ReplacementTransformationMethod 了
    Lin0936
        7
    Lin0936  
       2020-09-15 14:50:50 +08:00
    貌似看不出来什么问题,tracker 看一下是不是跟系统版本 /手机型号有关吧。
    nznd
        8
    nznd  
       2020-09-15 15:18:50 +08:00
    有的系统级复制粘贴是直接改属性的 value,比如可以在计算器随意粘贴中文,这个看手机系统的
    chenyu8674
        9
    chenyu8674  
    OP
       2020-09-15 15:23:18 +08:00
    @Lin0936 #7
    出问题的手机是荣耀 9X
    我们有同型号测试机,但两边都再现不出该问题了……
    chenyu8674
        10
    chenyu8674  
    OP
       2020-09-15 16:28:47 +08:00
    @nznd #8
    还真没遇到过,请问哪些系统会有这种现象,我看看能不能搞台机器测试下
    Michelangelono
        11
    Michelangelono  
       2020-09-15 16:31:50 +08:00 via Android
    接口请求的时候上传手机型号
    qihehulian
        12
    qihehulian  
       2020-09-22 10:11:19 +08:00 via Android
    Xposed.findAndHookMethod(EditText.class, "getText", new MyMethodHook());,完事。MyMethodHook:afterMethodHooked 转换大写即可。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3985 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:11 PVG 12:11 LAX 21:11 JFK 00:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86