2015-09-11 14 views
5

Korzystałem z samouczków online dotyczących tego kodu. i opublikuje Google Play z Androidem api 23 Marshmallow.Programowanie Android NameValuePair usunięto dla api 23

private Map<String, String> decodeExtras(String extras) { 
    Map<String, String> results = new HashMap<String, String>(); 
    try { 
     URI rawExtras = new URI("?" + extras); 
     List<NameValuePair> extraList = URLEncodedUtils.parse(rawExtras, "UTF-8"); 
     for (NameValuePair item : extraList) { 
      String name = item.getName(); 
      int i = 0; 
      while (results.containsKey(name)) { 
       name = item.getName() + ++i; 
      } 
      results.put(name, item.getValue()); 
     } 
    } catch (URISyntaxException e) { 
     Log.w(TAG, "Invalid syntax error while decoding extras data from server."); 
    } 
    return results; 
} 

Ale NameValuePair i URLEncodedUtils zostały usunięte w api23 Marshmallow. Jak mogę zmienić ten kod?

Proszę, pomóż mi.

+1

możliwe duplikat [Jak używać starszego klienta Apache HTTP na Androida M?] (Http://stackoverflow.com/questions/31653002/how-to-use-the-legacy-apache-http- client-on-android-m) –

Odpowiedz

0

Można ręcznie dodać HttpClient biblioteki do projektu

2

Korzystanie httpMime.jar wysyłania danych do bazy danych serwera.

Pobierz plik.jar z here i wklej go do folderu libs.

Zastosowanie:

MultipartEntity multi = new MultipartEntity(); 
multi.addPart("username", new StringBody("Kgandroid")); 
multi.addPart("password", new StringBody("nopass")); 

Jest to doskonała alternatywa dla namevaluepairs.

Dla URLEncodedUtils:

Czytaj this.

Znajdziesz tu:

Ten podgląd usunie wsparcie dla klienta HTTP Apache. Jeśli Twoja aplikacja używa tego klienta i jest kierowana na Androida 2.3 (poziom API 9) lub wyższy, użyj zamiast tego klasy HttpURLConnection. Ten interfejs API jest bardziej wydajny, ponieważ ogranicza użycie sieci dzięki przezroczystemu buforowaniu kompresji i odpowiedzi oraz minimalizuje zużycie energii.

Więc teraz musimy użyć HttpURLConnection

Prosty samouczek do korzystania HttpURLConnection zostaną znalezione here.

0

To nie jest dokładnie to, czego szukasz, ale jest bardzo blisko:

Uri.Builder builder = new Uri.Builder() 
    .query(extras); 
Uri uri = builder.build(); 
Set<String> keys = uri.getQueryParameterNames(); 
Iterator<String> iterator = x.iterator(); 
HashMap<String, List<String>> map = new HashMap<>(); 
while(iterator.hasNext()) { 
     String key = iterator.next(); 
     List<String> values = uri.getQueryParameters(key); 
     map.put(key, values); 
} 

tworzy Uri od byłego parametru extras swojej metody, która wygląda jak część zapytania adresu URL. Po tym można zadzwonić pod numer getQueryParameterNames, aby pobrać Set kluczy, a od każdego klucza - List<String>, który reprezentuje każdą wartość, jaką zawiera dodatek dla danego klucza.

7

Wystarczy użyć Retrofit

LUB

Zastosowanie HttpURLConnection

LUB

Dodaj to do swojej build.gradle (ale to nie jest sugerowane)

android { 
    useLibrary 'org.apache.http.legacy' 
} 
+1

Jest to najlepsza odpowiedź, ponieważ zawiera listę 3 najlepszych opcji (w kolejności malejącej nie mniejszej). –

2

Oto odpowiednik kod przy użyciu android.net.Uri dla poziomu API 11 (Honeycomb) i nowszych. Ten kod jest dość prosty, więc naprawdę nie ma sensu ściąganie interfejsów API innych firm lub starszych API, aby uniknąć tego problemu.

private Map<String, String> decodeExtras(String extras) { 
    Map<String, String> results = new HashMap<>(); 
    Uri uri = new Uri.Builder().encodedQuery(extras).build(); 
    Set<String> parameterNames = uri.getQueryParameterNames(); 
    for (String parameterName : parameterNames) { 
     List<String> values = uri.getQueryParameters(parameterName); 
     int count = values.size(); 
     if (count >= 1) { 
      results.put(parameterName, values.get(0)); 
      for (int i = 1; i < count; ++i) { 
       results.put(parameterName + i, values.get(i)); 
      } 
     } 
    } 
    return results; 
} 
Powiązane problemy