Java 来自android活动的服务器调用

Java 来自android活动的服务器调用,java,android,multithreading,Java,Android,Multithreading,我正在开发android应用程序。我需要从我的服务器获取数据。我从acitivity进行服务器调用,得到了java.lang.reflect.invocationtargetexception,因为我是在android主线程上进行的。为了解决这个问题,我只需创建一个新线程并调用thread.join来完成它。我想知道使用这样的代码是否有任何副作用?我尝试使用处理程序和异步执行器,但代码变得混乱。 非常感谢您的帮助。谢谢 Runnable runnable=new Runnable() {

我正在开发android应用程序。我需要从我的服务器获取数据。我从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 SDK来完成这些操作。例如:

private class GetNearCarsAsyncTask extends AsyncTask<Void, Void, NearCarReturnType> {
     protected Long doInBackground(Void... arg) 
     {
          nearCars=getNearCars();
          return nearCars;
     }

     protected void onPostExecute(NearCarReturnType result) {
         // DO something on UI Thread
     }
 }
私有类GetNearCarsAsyncTask扩展异步任务{
受保护的长doInBackground(无效…arg)
{
nearCars=getNearCars();
返回附近的车辆;
}
受保护的void onPostExecute(NearCarReturnType结果){
//在UI线程上执行某些操作
}
}

但是,如果你在谷歌上搜索“AsyncTask的问题”之类的东西,那么AsyncTask会有陷阱和陷阱。因此,开发人员现在更喜欢使用HTTP库,或者避免常见的陷阱。

查看Android Volley async网络库!它非常强大!使用OkHttp或Volley之类的库。loopJ是我个人喜欢的另一个选项。这些库将在工作线程上执行网络调用,并在主线程上返回响应。通过接口和事件管理,您可以轻松地调整逻辑。
join()
将保留主UI线程,这不是一个好方法。而是使用
AsyncTask
看看这个,谢谢您的回复Adil。我不知道这些库。但是这种方法有什么缺点吗。时间有点短。使用这些库进行重构可能需要时间,您现在可以从AsyncTask开始。但是请记住,你可能会遇到生命周期的问题,特别是在轮换时。例如,您可能希望保留一个AsyncTask的活动级别实例,您可以在活动结束时取消该实例,或者如果您的活动是在轮换时重新创建的,则可以决定轮换时要执行的操作。以防万一,您可能希望阅读此博客文章