Какова структура / шаблон для android / java для организации HTTP-вызовов веб-службы в проекте?

Прямо сейчас, когда у моего проекта есть веб-сервис в конце. Я использую для создания своего проекта с этой структурой / шаблоном.

проект

  • Пакет HttpMethods
    • HttpGetThread
    • HttpPostThread
    • HttpMultipartPostThread
  • Пакет интерфейсов
    • IPostResponse

Код, который я писал в моих файлах JAVA,

IPostResponse.java

public interface IPostResponse { public void getResponse(String response); } 

HttpGetThread.java

 public class HttpGetThread extends Thread { private String url; private final int HTTP_OK = 200; private IPostResponse ipostObj; public HttpGetThread(String url, IPostResponse ipostObj) { this.url = url; this.ipostObj = ipostObj; } public void run() { try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); int responseCode = httpResponse.getStatusLine().getStatusCode(); if (responseCode == HTTP_OK) { InputStream inputStream = httpResponse.getEntity().getContent(); int bufferCount = 0; StringBuffer buffer = new StringBuffer(); while ((bufferCount = inputStream.read()) != -1) { buffer.append((char) bufferCount); } ipostObj.getResponse(buffer.toString()); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

То же самое в HttpPost и HttpMultipartPost , расширяя Thread и имея один конструктор и метод запуска.

Затем,

Я реализую интерфейс для одного действия и расширяю его на все остальные действия и получаю ответ и делаю вызов, создавая объект классов Http с параметрами и вызываю obj.start();


Я все еще верю, что: мне не хватает многих вещей, или эта структура очень бедна.

Мне нужно знать, что для приложения Android для реализации вызовов веб-службы в основном во всех действиях и повторной юзабилити кода, с какими шаблонами / структурами я должен следовать ?

Я просто видел, как Facebook делает вызов веб-службы, например, для входа в систему / выхода из системы, у которого есть вход и выход из системы.

Есть ли блог / статья / ответы, которые хорошо документированы для того же? Пожалуйста, может ли любой пользователь поделиться своим превосходным опытом и решением для этого?

Меня больше интересует « Как должен выглядеть мой класс и интерфейс, какие методы он должен иметь? »

Solutions Collecting From Web of "Какова структура / шаблон для android / java для организации HTTP-вызовов веб-службы в проекте?"

1-й и для большинства предложений – почему вы не используете Painless Threading, то есть AsyncTask

Теперь, 2-е, создайте повторно используемый код, как показано ниже, вы можете создать столько же, сколько методы с параметрами запроса.

 public class JSONUtil { private static JSONUtil inst; private JSONUtil() { } public static JSONUtil getInstance() { if (inst == null) inst = new JSONUtil(); return inst; } /** * Request JSON based web service to get response * * @param url * - base URL * @param request * - JSON request * @return response * @throws ClientProtocolException * @throws IOException * @throws IllegalStateException * @throws JSONException */ public HttpResponse request(String url, JSONObject request) throws ClientProtocolException, IOException, IllegalStateException, JSONException { synchronized (inst) { DefaultHttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); post.setEntity(new StringEntity(request.toString(), "utf-8")); HttpResponse response = client.execute(post); return response; } } public HttpResponse request(String url) throws ClientProtocolException, IOException, IllegalStateException, JSONException { synchronized (inst) { DefaultHttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); post.addHeader("Cache-Control", "no-cache"); HttpResponse response = client.execute(post); return response; } } } 

Google использует самую популярную инфраструктуру MVC для Android и использует ее.

Шаблон MVC на Android

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

HttpClient

Если вы посмотрите на HttpClient (как Entity для запроса на конечные точки), все дело в запросе и ответе. Подумайте так. Поведение протокола Http для «отправки запроса» требует метода, заголовков (необязательно), body (необязательно). Аналогично, в ответ на запрос мы получаем ответ со статусом, заголовками и телом. Таким образом, вы можете просто использовать свой HttpClient как:

 public class HttpClient { ExecutorService executor = Executors.newFixedThreadPool(5); //method below is just prototype public String execute(String method, String url, Map < String, String > headers ) { try { URL url = new URL("http://www.javatpoint.com/java-tutorial"); HttpURLConnection huc = (HttpURLConnection) url.openConnection(); //code to write headers, body if any huc.disconnect(); //return data } catch (Exception e) { System.out.println(e); } } public String executeAsync(String method, String url, Map < String, String > headers, Callback callback ) {//Callback is Interface having onResult() executor.execute( new Runnable() { void run() { String json= execute(method,url,headers) callback.onResult(json); } } ); } } 

Таким образом, вам не нужно создавать класс для отдельного запроса. Вместо этого мы просто используем HtttpClient . Вы должны вызывать API в другом потоке (не в главном потоке Android).

Структура API

Допустим, у вас есть ресурс под названием User, и вам нужно CRUD в вашем приложении. Вы можете создать интерфейс UserRepository и реализацию UserRepositoryImpl

 interface UserRepository { void get(int userId, Callback callback); void add(String json,Callback callback); //other methods } class UserRepositoryImp { void get(int userId, Callback callback) { HttpClient httpClient= new HttpClient(); //create headers map httpClient.executeAsync("GET","/",authHeaders,callback); } void add(String json,Callback callback) { HttpClient httpClient= new HttpClient(); //create headers map httpClient.executeAsync("POST","/",authHeaders,callback); } //other methods } 

Пожалуйста, обратите внимание, что вы должны обновить интерфейс пользователя в пользовательском интерфейсе Android. [Выше, реализация не беспокоится об этом]