2015-06-24 3 views
0

Я создаю приложение для Android и мне нужно потреблять несколько веб-сервисов. Есть ли что-то, что можно учесть, чтобы вызвать различные веб-службы в одном и том же действии? Каковы наилучшие методы для этого? Я уже делал это для IOS (Objective-C), и то, что я делал, это создание другого класса NSObject, чтобы вызвать различные веб-сервисы, и все работает нормально. Будет ли то же самое с Java?, потребляющий несколько веб-сервисов на Android

То, что я нашел, на данный момент составляет Ksoap2, что кажется идеальным для того, что мне нужно, но я хотел бы услышать мнение других.

EDIT:

Что мне нужно знать, если мне нужно создать несколько задач асинхронных для каждого из моего URL или создания единого класса, который загружает каждые данные JSON, а затем разобрать его на методе обратного вызова. Какое лучшее решение?

+0

Является ли веб-сервис, который вы потребляя на основе SOAP? – Simon

+0

@Simon извините, я забыл упомянуть об этом.Я использую REST - Json webservices – Signo

+0

Я не знаю Ksoap2, но похоже, что это для SOAP, а не REST – Simon

ответ

1

Есть несколько аспектов, которые нужно иметь в виду при вызове удаленной службы: Прежде всего, вы не можете позвонить в WebService в главном потоке, потому что если сервер занимает слишком много времени, чтобы ответ тогда Android будет убить приложение: ANR (приложение не отвечает). Вы должны позвонить в отдельную тему. Вы можете использовать AsyncTask, но он может страдать от утечки памяти, поэтому имейте это в виду. Есть другое решение:

  1. Volley это один из лучших способов, чтобы сделать запрос HTTP, он запускает запрос в Separe нить и вам не придется беспокоиться о проблемах ANR
  2. OkHTTP еще одна библиотека populare который обрабатывает HTTP-запросы и ответ

Когда настанет время проанализировать ответ, существует несколько способов. Вы можете реализовать логику вручную, если ответ легко проанализировать или вы можете использовать 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 

Надеется, что это помогает вам

+0

Волейбол кажется лучшим решением. Последнее: если мне нужно сделать несколько веб-сервисов, то вызовите одну и ту же деятельность, что мне делать? объединить несколько очередей? Например, вызов следующего веб-сервиса в методе onResponse? – Signo

+0

Я бы предпочел позвонить им, если это возможно. Вы можете использовать свой подход, если вам нужно передать на следующий WS некоторые данные, извлеченные из предыдущего. – FrancescoAzzola

+0

Да, мне нужно передать данные из предыдущего. Тай, я попробую этот подход! – Signo

1

Вот некоторые вещи, которые я думаю, следует иметь в виду

Вызов веб-службы асинхронно. Если вы вызываете несколько веб-сервисов в одном мероприятии, это улучшит вашу производительность. Вы можете сделать каждый звонок внутри AsynchTask, используя HttpClient или можете использовать AsyncHTTPClient.

Используйте Jackson или Gson, чтобы перейти от JSON к экземпляру Java POJO. Это избавляет вас от разбора JSON вручную или с использованием API JSON низкого уровня.

+0

Спасибо за объяснение! Последний вопрос, можете ли вы объяснить мне, как Java обрабатывает несколько вызовов Webservices? Потому что мой страх в том, что если я не буду выбирать правильный подход к этой проблеме, у меня будет тонны исключений на мой код. – Signo

Смежные вопросы