我们可以在没有异步的情况下使用Httpget / Httppost吗?
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://www.example.com");
如果我没有使用异步,则会出现威胁错误。
答案 0 :(得分:0)
因为交互可能需要很长时间才能得到答案,所以你不能使用主线程,因为这是你如何停止应用程序的活动(所有操作同步),如果确实发生这种情况,你将收到ANR。 因此,任何需要为后台线程设置时间的操作,如果你想在完成后处理数据后的后台线程可以将信息传递给主线程。
答案 1 :(得分:0)
正如其他人所解释的那样,理想情况下,您不应该在主线程上执行网络操作,因为这会使UI在网络操作完成之前无法使用,因此反过来会导致应用程序无响应错误。 但如果您仍然需要它,您可以随时使用
禁用Strictmode StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.LAX);
答案 2 :(得分:0)
由于在主线程上执行了任何繁重的任务,因此发生此异常。如果执行任务花费太多时间,则可能会出现错误。要处理此问题,我们必须使用额外的线程来运行此类代码。 不需要在AsyncTask中运行代码,但是网络操作应该在这样的线程中。但AsyncTask对于这种类型的操作来说是更好的选择,所以每个人都建议。
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
//Your code goes here
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
您还可以使用以下
更改默认行为StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);