Java 在Android上使用多个Web服务

Java 在Android上使用多个Web服务,java,web-services,Java,Web Services,我正在创建一个android应用程序,我需要使用多个Web服务,为了在同一活动中调用不同的Web服务,有什么需要考虑的吗?这样做的最佳方法是什么? 我已经为IOS(Objective-C)做了这项工作,我所做的是创建不同的NSObject类,以便调用不同的Web服务,并且一切正常。Java也会这样吗 我发现现在阅读的内容似乎非常适合我的需要,但我想听听其他人的意见 编辑: 我需要知道的是,我是否需要为我的每个url创建多个异步任务,或者创建一个类来下载每个json数据,然后在回调方法上解析它。

我正在创建一个android应用程序,我需要使用多个Web服务,为了在同一活动中调用不同的Web服务,有什么需要考虑的吗?这样做的最佳方法是什么? 我已经为IOS(Objective-C)做了这项工作,我所做的是创建不同的NSObject类,以便调用不同的Web服务,并且一切正常。Java也会这样吗

我发现现在阅读的内容似乎非常适合我的需要,但我想听听其他人的意见

编辑:

我需要知道的是,我是否需要为我的每个url创建多个异步任务,或者创建一个类来下载每个json数据,然后在回调方法上解析它。
什么是最好的解决方案?

以下是我认为应该记住的一些事情

异步调用web服务。 如果在一个活动中调用多个web服务,这将提高性能。 您可以在using中进行每个调用,也可以使用
AsyncHTTPClient

使用或从JSON转到java POJO实例。
这样可以避免手动或使用低级JSON API解析JSON。

调用远程服务时需要记住以下几个方面: 首先,你不能在主线程中调用webservice,因为如果服务器的响应时间太长,Android将终止你的应用程序: ANR(应用程序无响应)。 你应该调用一个单独的线程。您可以使用AsyncTask,但它可能会出现内存泄漏,因此请注意。还有其他解决方案:

  • 截击这是发出HTTP请求的最佳方式之一,它在separe线程中运行请求,您不必担心ANR问题
  • OkHTTP是另一个处理HTTP请求和响应的populare库
  • 当需要解析响应时,有几种方法。如果响应很容易解析,或者可以使用Gson,那么可以手动实现逻辑。你可以看看

    如果你想使用截击,你应该:

     private RequestQueue queue;
    
     public void init(Context ctx) {       
        queue = Volley.newRequestQueue(ctx);
    }
    

    StringRequest req=新的StringRequest(Request.Method.GET,url,
    新的Response.Listener(){
    @凌驾
    公共void onResponse(字符串数据){
    //如果手动解析响应,请在此处进行解析
    }
    },
    新的Response.ErrorListener(){
    @凌驾
    公共错误响应(截击错误截击错误){
    //处理错误
    }
    }
    );
    队列。添加(请求);//将请求添加到队列
    

    希望对您有所帮助

    您正在使用的web服务是基于SOAP的吗?@Simon抱歉,我忘了提一下。。我使用的是REST-Json Webservices我不知道Ksoap2,但它看起来是用于SOAP的,而不是REST。如果您熟悉它,我更喜欢java的spring工具,我应该推荐spring的REST客户端,尽管我自己还没有在android上测试它的性能(您必须检查初始化模板需要多少时间),它应该适合你的需要,异步轻快的编码,看看吧:谢谢你的解释!最后一个问题,你能解释一下Java是如何处理多个Web服务调用的吗?因为我担心如果我没有选择正确的方法来解决这个问题,我会在我的代码截取上出现大量的异常,这似乎是最好的解决方案。最后一件事,如果我必须在同一个活动上调用多个Web服务,我应该怎么做?连接多个队列?例如,在onResponse方法上调用下一个webservice?如果可能的话,我更愿意当前调用它们。如果你必须将从上一个WS中提取的数据传递给下一个WS,你可以使用你的方法。是的,我必须传递上一个WS中的数据。我要试试这个方法!
    StringRequest req = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String data) {
                       // Parse here if you parse the response manually
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        //handle error
                    }
                }
        );
    
        queue.add(req); // Add request to queue