【问题标题】:add to recycler view if URL is valid如果 URL 有效,则添加到回收站视图
【发布时间】:2022-01-05 00:01:32
【问题描述】:

我想检查编辑文本中的 URL,如果它有效,请在回收站视图中添加一个项目。所以为了这个目的,我启动了一个线程来检查 HTTP 连接。

 thread = new Thread(new Runnable() {
                    @Override
                    public void run() {

                        String link = edt.getText().toString();
                        URL url = null;
                        try {
                            url = new URL(link);
                            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                            int code = connection.getResponseCode();

                            if(code == 200) {
                                Log.d(TAG, "reachable");
                                InsertItem(url,adapter);
                            } else {
                                Log.d(TAG, "in catch: not reachable");
                            }
                        }  catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });
                thread.start();

问题是我尝试添加项目时遇到的错误

 private void InsertItem(URL url, MyAdapter adapter) {
        thread.currentThread().interrupt();
        arrayList.add(0,new file(url.toString()));
        adapter.notifyItemChanged(0);
};

错误是:

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

【问题讨论】:

    标签: android multithreading android-recyclerview httpconnection


    【解决方案1】:

    android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能接触其视图。

    看起来在您的新线程中,您正在调用 InsertItem(url,adapter)(应以小写“I”开头),它试图在 UI 元素上执行一些工作。

    由于错误状态,您无法触摸 UI 线程之外的视图。您可以尝试在线程中添加 runOnUiThread(() -> insertItems(url,adapter) 以将操作发布到 UI 线程。

    【讨论】:

    • 谢谢。如何停止我运行的所有线程? (新线程,runOnUiThread)
    • 你不需要管理的runOnUiThread,它只是在android主线程上执行一些操作的一种方式。如果您将 runOnUiThread 块移动到 insertItem() 方法并在调用 thread.interrupt() 之前,您可以像以前一样在新线程上调用中断
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多