【发布时间】:2015-05-30 22:25:51
【问题描述】:
我正在开发安卓应用。我需要从我的服务器获取数据。我正在从 acitivity 进行服务器调用并得到 java.lang.reflect.invocationtargetexception,因为我是在主 android 线程上进行的。为了解决这个问题,我只需创建一个新线程并调用 thread.join 即可完成。我想知道使用此类代码有什么副作用吗?我尝试使用处理程序和异步执行程序,但代码变得混乱。 会很感激帮助。谢谢!
Runnable runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
nearCars=getNearCars();
}
};
Thread t=new Thread(runnable);
t.start();
try {
t.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
【问题讨论】:
-
查看 Android Volley 异步网络库!它非常强大!
-
改用 OkHttp 或 Volley 等库。
-
loopJ 是我个人喜欢的另一个选项。这些库将在工作线程上执行网络调用并在主线程上返回响应。您可以通过接口和事件管理轻松纠正您的逻辑。
-
join()将保留您的主 UI 线程,这不是一个好方法。而是使用AsyncTask -
看看这个SO question
标签: java android multithreading