【问题标题】:Why not update UI elemnts in Android为什么不更新 Android 中的 UI 元素
【发布时间】:2020-03-08 10:23:17
【问题描述】:

在我的应用程序中,我应该使用 socket.io 并且我希望在收到我的事件更新 UI 元素时!
我写了下面的代码,我收到了我的事件显示日志,但没有更新任何 UI!

我希望在收到事件时检查此获胜者是否为用户,然后更新我的 UI。
logCat 中显示我的 logs不更新任何 UI 元素

我的代码:

public void onsocketFinishRecieve(final JSONObject ob) {
        try {
            ((BaseActivity) context).runOnUiThread(() -> {
                try {
                    cancelTimer();
                    final FinishResponse finishResponse = new Gson().fromJson(ob.toString(), FinishResponse.class);
                    if (finishResponse.getRes().getWinnerName().equals("not user") || finishResponse.getRes().getWinnerName().equals("not winner")) {
                        winnerNameWhenFinished = "Not winner";
                    } else {
                        winnerNameWhenFinished = finishResponse.getRes().getWinnerName();
                    }
                    if (detail.getId() != null) {
                        if (detail.getId() == finishResponse.getRes().getId()) {
                            //Set new winner layouts
                            //Register in auction
                                if (Constants.profileResponse != null) {
                                    if (Constants.profileResponse.getRes() != null) {
                                        if (Constants.profileResponse.getRes().getUser() != null) {
                                            //Winner
                                            if (Constants.profileResponse.getRes().getUser().getId().equals(finishResponse.getRes().getUserId())) {
                                                Log.e("FinishedSocket", "1");
                                                detailPage_bottomWinnerRateTxt.setVisibility(View.GONE);
                                                detailPage_bottomWinnerBuyTxt.setText("Show basket");
                                                detailPage_bottomWinnerBuyTxt.setOnClickListener(v -> {
                                                    Intent intent = new Intent(context, MainActivity.class);
                                                    intent.putExtra("OPEN_CART_IN_MAIN", "true");
                                                    startActivity(intent);
                                                });
                                            } else {
                                                Log.e("FinishedSocket", "2");
                                                //Loser
                                                detailPage_bottomWinnerBuyTxt.setText("Awesome offers");
                                            }
                                        }
                                    }
                                }
                        }
                    }
                } catch (Exception e) {
                    Log.e("DetailResErr", e.getMessage());
                }
            });
        } catch (Exception e) {
            Log.e("DetailResErr", e.getMessage());
        }
    }

Logcat 消息:

2020-03-08 13:37:37.399 E/FinishedSocket: 2

logcat上面显示message,为什么不运行这一行:detailPage_bottomWinnerBuyTxt.setText("Awesome offers");??

我该如何解决?

【问题讨论】:

    标签: java android socket.io android-thread


    【解决方案1】:

    尝试像这样在主线程上运行它。

    someActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
               //Your code to run in GUI thread here
               detailPage_bottomWinnerBuyTxt.setText("Awesome offers");
            }
    });
    

    【讨论】:

    • 谢谢我的朋友。我写了下面的代码,但又不能让我工作,也不能更新 UI! ((AuctionDetailPage) context).runOnUiThread(new Runnable() { @Override public void run() { //Your code to run in GUI thread here detailPage_bottomWinnerBuyTxt.setText("Awesome offers"); } });
    【解决方案2】:

    套接字在 IOThread 上工作,而另一端 UI 在称为 UI 线程的单独线程上工作。因此,更新 UI 线程上的 UI 元素。 使用注解:

    @UiThread
    public abstract void setText(@NonNull String text) { ... }

    要了解更多注释,请查看以下博客: https://medium.com/@gurwindersingh_37022/android-annotations-30b4a2850d0

    【讨论】:

    • 谢谢我的朋友,但是你能把我上面的代码发给我吗?请我的朋友,我真的需要你的帮助。pelase
    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多