【问题标题】:Getting a strange corruption of a string returned by a handleMessage in a class that extends Handler在扩展 Handler 的类中,handleMessage 返回的字符串出现奇怪的损坏
【发布时间】:2019-05-23 23:33:36
【问题描述】:

我有一个扩展 Handler 并从蓝牙流接收字符串的 android 类。沿着字符串的某处,字符被覆盖并且字符串被扩展。这是一个示例字符串:

第 1 天 @ 上午 11:10:关闭,打开 @ 2:00,关闭 @ android.widget.EditText{4bc3048 V.ED..CL. ........ 0,.

这里有一些代码:

    @Override
    public void handleMessage (Message msg) {
        DeviceControlActivity activity = mActivity.get ();
        if (activity != null) {
            switch (msg.what) {
                case MESSAGE_STATE_CHANGE:
                    Utils.log ("MESSAGE_STATE_CHANGE:" + msg.arg1);
                    final ActionBar bar = activity.getActionBar ();
                    switch (msg.arg1) {
                        case DeviceConnector.STATE_CONNECTED:
                            if(bar.getSubtitle() != MSG_CONNECTED) {
                                activity.BeeSeekStop();
                            }
                            bar.setSubtitle (MSG_CONNECTED);
                            break;
                        case DeviceConnector.STATE_CONNECTING:
                            bar.setSubtitle (MSG_CONNECTING);
                            break;
                        case DeviceConnector.STATE_NONE:
                            if(bar.getSubtitle() == MSG_NOT_CONNECTED) {
                                activity.BeeSeekStart();
                            }
                            bar.setSubtitle (MSG_NOT_CONNECTED);
                            break;
                    }
                    activity.invalidateOptionsMenu ();
                    break;

                case MESSAGE_READ:
                    final String readMessage = (String) msg.obj;
                    ...
                    break;

我希望看到:

第 1 天 @ 上午 11:10:关闭,打开 @ 2:00,关闭 @ 3:00。

【问题讨论】:

    标签: android string message android-handler corruption


    【解决方案1】:

    我感觉像 android.widget.EditText{4bc3048 V.ED..CL. ........ 0,.实际上是 edittext ID,因为您可能正在尝试获取这样的文本:edittext.getText() 而不是将其转换为字符串。 你必须这样做:edittext.getText().toString();

    【讨论】:

    • 感谢您的回复。我已经检查了我对 getText() 的所有用法,并且总是用 toString() 作为后缀,所以如果我理解正确,我会按照你说的那样做。问题显示在 msg 变量本身中。
    • 我刚刚仔细检查了一遍。很抱歉错误地提到了 toString(),实际上你不是在调用 edittext.getText.toString(),而是在调用 edittext.toString()。仔细检查后告诉我。因为我得到了 android.support.v7.widget.AppCompatEditText{fa88f2b VFED..CL。 ........ 42,383-1038,500 #7f0900d3 app:id/edtx_email} 当调用edittext.toString()时。
    • 我不确定我是否理解。通过蓝牙传输的字符串如我的问题底部所示。我从不使用任何 .toString() 。我在我的 XML 中使用 EditText 小部件。这些被转换为我应用 .getText().toString() 的 TextView。但是,据我所知,这些甚至在那时都没有发挥作用,稍后会在我的代码中设置。也许我错过了一些东西。您是否对破坏蓝牙流字符串的字符串过于重视?我认为这只是从内存中随机抓取的,恰好是 EditText。
    • 您的评论:“因为我得到了 android.support.v7.widget.AppCompatEditText{fa88f2b VFED..CL. ........ 42,383-1038,500 #7f0900d3 app:id/ edtx_email} 当调用 edittext.toString() 时。”不过让我很感兴趣。也许我对情况的理解是原始的。希望听到更多关于你的推理,费萨尔。感谢您的帮助。
    • 好的,我想这就是费萨尔要说的。还有人知道他在说什么吗?
    猜你喜欢
    • 2017-10-11
    • 2017-03-11
    • 2014-02-28
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2012-08-15
    相关资源
    最近更新 更多