我的线程有一些问题。在调试模式和单元测试期间,AsyncTask 不会作为单个线程执行。
此外,当我尝试将我的 HTTP-Post 测试到真实服务器时,我会超时。我之前在模拟器中得到了这个,它已经解决了
StrictMode.setThreadPolicy(policy);
不幸的是,这在 Robolectric 上不起作用,因为我收到一个错误
java.lang.NoClassDefFoundError: dalvik/system/CloseGuard$Reporter
我该如何解决这个问题并继续使用 robolectric 构建我的单元测试?是否有可能我在线程期间处理了错误?异步任务:
public class HttpPostTask extends
AsyncTask<MyContainer, Integer, MyResult> {
@Override
protected MyResult doInBackground(MyContainer... params) {
/* some code here */
resp = client.execute(container.post);
}
}
执行异步任务:
new HttpPostTask().execute(container);
谢谢
=============== 更新 =================== 我插入了一些打印来确定帖子在哪个线程上运行。这些是结果:
在模拟器中:
09-27 09:19:12.909: I/System.out(1813): Running REST Client on thread 'Thread-83'
09-27 09:19:12.909: I/System.out(1813): Running HTTP Post on thread 'AsyncTask #2'
在 Robolectric 中:
Running REST Client on thread 'main'
Running HTTP Post on thread 'main'
过了一会儿我得到一个拒绝+超时异常:
org.apache.http.conn.HttpHostConnectException: Connection to http://10.0.2.2:8080 refused
为了绕过 Robolectric 的 HTTP Post,我使用了这个:'Robolectric.getFakeHttpLayer().interceptHttpRequests(false);'