在Android上使用多个Web服务

时间:2015-06-24 08:47:22

标签: java web-services

我正在创建一个Android应用程序,我需要使用多个Web服务,为了在同一个活动上调用不同的Web服务,有什么需要考虑的吗?哪种方法最好? 我已经为IOS(Objective-C)做了这个,我做的是创建不同的NSObject类,以便调用不同的Web服务,一切正常。是否与Java相同?

我现在读到的是Ksoap2这似乎非常适合我的需要,但我想听听别人的意见。

修改

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

2 个答案:

答案 0 :(得分:1)

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

异步调用Web服务。 如果您在一个活动中调用多个Web服务,这将提高您的性能。 您可以使用AsynchTaskHttpClient内进行每次通话,也可以使用AsyncHTTPClient

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

答案 1 :(得分:1)

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

  1. Volley它是发出HTTP请求的最好方式之一,它在separe线程中运行请求而你不必担心ANR问题
  2. OkHTTP是另一个处理HTTP请求和响应的人口库
  3. 当需要解析响应时,有几种方法。如果响应易于解析或者您可以使用 Gson ,则可以手动实现逻辑。你可以看看here

    如果你想使用排球,你应该:

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

    ...

    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
    

    希望它可以帮到你