2015-06-17 4 views
0

Есть ли рекомендуемый способ отправки запроса на андроид? потому что раньше я использую HttpPost и HttpClient для выполнения запроса поста, но эти классы теперь осуждается в уровне API 22.Есть ли рекомендуемый способ отправки запроса на андроид?

+0

Вы можете использовать Volley или менеджер UrlConnection – Madhu

ответ

0

Да, они устарели. Вы можете использовать Volley, который рекомендуется Google Dev.

Volley предлагает следующие преимущества: Автоматическое планирование сетевых запросов. Несколько одновременных сетевых подключений. Кэш-память прозрачного диска и памяти с согласованием стандартного HTTP-кэша. Поддержка определения приоритетов запроса. API запросов на аннулирование. Вы можете отменить один запрос, или вы можете установить блоки или области запросов для отмены. Простота настройки, например, для повторной попытки и отсрочки. Сильное упорядочение, которое позволяет легко заполнить ваш пользовательский интерфейс данными, полученными асинхронно из сети.

Volley очень прост в использовании:

// Instantiate the RequestQueue. 
RequestQueue queue = Volley.newRequestQueue(this); 
String url ="http://www.google.com"; 

// Request a string response from the provided URL. 
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
     new Response.Listener<String>() { 
@Override 
public void onResponse(String response) { 
    // Display the first 500 characters of the response string. 
    mTextView.setText("Response is: "+ response.substring(0,500)); 
} 
}, new Response.ErrorListener() { 
@Override 
public void onErrorResponse(VolleyError error) { 
    mTextView.setText("That didn't work!"); 
} 
}); 
// Add the request to the RequestQueue. 
queue.add(stringRequest); 
0

Вы можете использовать HttpURLConnection

public String makeRequest(String pageURL, String params) 
{ 
    String result = null; 
    String finalURL =pageURL; 
    Logger.i("postURL", finalURL); 
    Logger.i("data", params); 
    try { 
     URL url = new URL(finalURL); 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setDoOutput(true); 
     urlConnection.setDoInput(true); 
     urlConnection.setRequestMethod("POST"); 
     urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
     urlConnection.setRequestProperty("Accept", "application/json"); 
     OutputStream os = urlConnection.getOutputStream(); 
     os.write(params.getBytes("UTF-8")); 
     os.close(); 
     int HttpResultCode =urlConnection.getResponseCode(); 
     if(HttpResultCode ==HttpURLConnection.HTTP_OK){ 
      InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
      result = convertStreamToString(in); 
      Logger.i("API POST RESPONSE",result); 
     }else{ 
      Logger.e("Error in response ", "HTTP Error Code "+HttpResultCode +" : "+urlConnection.getResponseMessage()); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 

Затем преобразования потока в строку

private String convertStreamToString(InputStream is) { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line).append('\n'); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 

Создайте свой JSON

JSONObject j=new JSONObject(); 
     try { 
      j.put("name","hello"); 
      j.put("email","[email protected]"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    //Call the method 
     makeRequest("www.url.com",j.toString()); 
0

Просто, чтобы показать другую возможную библиотеку, которая могла бы помочь вам: OkHttp

С примерного постом от их Webseite:

public static final MediaType JSON 
= MediaType.parse("application/json; charset=utf-8"); 

OkHttpClient client = new OkHttpClient(); 

String post(String url, String json) throws IOException { 
    RequestBody body = RequestBody.create(JSON, json); 
    Request request = new Request.Builder() 
     .url(url) 
     .post(body) 
     .build(); 
    Response response = client.newCall(request).execute(); 
    return response.body().string(); 
} 

или Retrofit.

Вы в основном создать интерфейс с аннотациями о остальных API и параметров вы призывающих, и может получить разобранный модель JSon так:

public interface MyService { 
    @POST("/api") 
    void createTask(@Body CustomObject o, Callback<CustomObject > cb); 
} 

Вы можете установить их обоих и вместе, вот руководство, которое мне очень помогло: https://futurestud.io/blog/retrofit-getting-started-and-android-client/

Несмотря на то, что это не официальный способ, рекомендуемый в документах google, это красивые библиотеки, на которые стоит обратить внимание.

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