- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不太熟悉线程的概念,但每次尝试显示 RecyclerView 时都会出现此错误: 只有创建 View 层次结构的原始线程才能触摸其 View 。我正在从服务器检索有关某些客户端的数据,将其放入 ArrayList 中,然后在 recyclerView 中显示数据。
数据在 doInBackGround() 方法中检索
这是我的代码:
ClientList.java:
public class ClientList extends AppCompatActivity {
private ClientAdapter clientAdapter;
private RecyclerView recyclerView;
List<Client> clientList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client_list);
clientList= new ArrayList<>();
recyclerView=findViewById(R.id.client_list_recycler);
ConnectionOdoo tarea;
tarea = new ConnectionOdoo();
tarea.execute();
}
private class ConnectionOdoo extends AsyncTask<Void, String, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
// Try connection to server
ConnectionToServer oc = ConnectionToServer.connect(Url, Port, DataBase, Username, Passwort);
/* Object[] param = {new Object[0]};
Integer ids = oc.search_count("product.template", param);
System.out.println("Num. of customers: " + ids.toString() + "\n");*/
Object[] param = {new Object[]{
new Object[]{"customer", "=", true},
new Object[]{"is_company", "=", false}}};
List<HashMap<String, Object>> data = oc.search_read("res.partner", param, "name", "id");
String msgResult = "";
for (int i = 0; i < data.size(); ++i) {
Log.i("NAMES ", data.get(i).get("name")+"");
clientList.add(new Client(data.get(i).get("name")+"") );
}
clientAdapter=new ClientAdapter(clientList, ClientList.this);
RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(ClientList.this);
**recyclerView.setLayoutManager(layoutManager);**
recyclerView.setAdapter(clientAdapter);
return false;
}
}
}
** ** 之间的行是导致错误的行。
这是日志:
Process: com.example.tarik.gestion, PID: 9642
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7665)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1119)
at android.view.View.requestLayout(View.java:18855)
at android.view.View.requestLayout(View.java:18855)
at android.view.View.requestLayout(View.java:18855)
at android.view.View.requestLayout(View.java:18855)
at android.view.View.requestLayout(View.java:18855)
at android.view.View.requestLayout(View.java:18855)
at android.support.constraint.ConstraintLayout.requestLayout(ConstraintLayout.java:3172)
at android.view.View.requestLayout(View.java:18855)
at android.support.v7.widget.RecyclerView.requestLayout(RecyclerView.java:4202)
at android.view.ViewGroup.removeAllViews(ViewGroup.java:4688)
at android.support.v7.widget.RecyclerView$5.removeAllViews(RecyclerView.java:900)
at android.support.v7.widget.ChildHelper.removeAllViewsUnfiltered(ChildHelper.java:193)
at android.support.v7.widget.RecyclerView.setLayoutManager(RecyclerView.java:1334)
at com.example.tarik.gestion.ClientList$ConnectionOdoo.doInBackground(ClientList.java:64)
at com.example.tarik.gestion.ClientList$ConnectionOdoo.doInBackground(ClientList.java:37)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
最佳答案
您需要将更新 UI 的代码放入 UI 线程中:
runOnUiThread(new Runnable() {
@Override
public void run() {
//your code here to update UI
}
});
关于java - 如何解决错误: Only the original thread that created a view hierarchy can touch its views,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56917814/
完成此任务的最佳方法是什么:主线程(线程 A)创建另外两个线程(线程 B 和线程 C)。线程 B 和 C 执行繁重的磁盘 I/O,最终需要将它们创建的资源传递给线程 A,然后调用外部 DLL 文件中的
我是一名对 Julia 语言感兴趣的新手程序员。文档( https://docs.julialang.org/en/v1/base/multi-threading/ )说 Threads.@threa
python中的thread.start_new_thread和threading.Thread.start有什么区别? 我注意到,当调用 start_new_thread 时,新线程会在调用线程终止
我正在学习安卓蓝牙编程。我从 Google 的 Android 开发者网站上复制了大部分代码以供学习。这个想法是监听服务器上的连接是在一个新线程中完成的,而不会阻塞 UI 线程。当收到连接请求时,连接
执行对象方法的线程是否依赖于创建它的线程上的线程? 假设您的 java 应用程序中有两个线程 Thread1 和 Thread2,以及两个类 ClassA 和 ClassB。 您在 Thread1 上
我正在用这段代码测试 C++11 线程,但是在创建线程时,我遇到了错误没有匹配函数调用 'std::thread::thread()'. 这就像我给 std::thread ctr 的函数有什么问题,
我有如下类 eventEngine 和网关: class eventEngine { public: eventEngine(); std::thread threa; std
我需要运行与列表 dirlist 中的元素一样多的 Observer 类线程。当我运行它 python 控制台时,它可以正常工作。 class Observer(Thread): def ru
我在一本 Java 书中读到了下面的代码。我知道主类默认继承 Thread 类,所以 currentThread();而不是 Thread.currentThread();也会做这项工作。 但我不明白
我在我的系统中使用第 3 方 API,该 API 启动一个永久运行的用户线程。一旦我的程序结束,JVM 由于该线程而继续运行,因此我尝试获取此线程引用并通过更改它 thread.setDaemon(t
我所知道的 Python 中的每个对象都可以通过调用来处理其基类初始化: super(BaseClass, self).__init__() threading.Thread 的子类似乎不是这种情况,
在我最近从事的 Xamarin 项目中,我可以看到开发人员使用了 Java.Lang.Thread 以及 System.Threading.Thread(用于非常相似的操作 - 例如在后台加载数据)。
我在 Julia 中运行双循环。代码非常简单。 w = rand(1000,1000) function regular_demo(w::Array{Float64, 2}) n = size
我在 Windows 上使用 Python 3。我正在使用 threading.Thread动态运行一个函数,我可以带参数或不带参数调用它。我正在设置一个列表,其中的第一项是定义路径的字符串。其他参数
我遇到了一些使用线程模块(使用 Python 2.6)管理线程的示例。 我想了解的是这个例子是如何调用“运行”方法的,在哪里调用的。我在任何地方都看不到它。 ThreadUrl 类在 main() 函
假设我从 threading.Thread 派生: from threading import Thread class Worker(Thread): def start(self):
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
使用 WinDbg 和 SOS,我有以下内容: 0:011> !threads ThreadCount: 7 UnstartedThread: 0 BackgroundThread: 4 Pendin
App Engine 给出错误: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfe
我正在尝试将 Swing JEditorPane 嵌入到 JavaFX 项目中,如下代码所示。 Platform.runLater(() -> { SyntaxTester ob = new
我是一名优秀的程序员,十分优秀!