Librería de Lvl y melcocha de android

La librería Lvl no compila más en Android Marshmallow debido a la falta de apache. Puede agregar useLibrary 'org.apache.http.legacy pero es sólo una solución temporal. El problema es este método:

 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) { results.put(item.getName(), item.getValue()); } } catch (URISyntaxException ignored) { } return results; } 

NameValuePair y URLEncodedUtils no se encuentran.

¿Cuál es el nuevo "way" ? ¿Cómo puedo reemplazar esta llamada por un nuevo código compatible con la nueva versión de Android?

Escribí mi propia clase mirando el código original como solución temporal:

 public class URLUtils { private static final String PARAMETER_SEPARATOR = "&"; private static final String NAME_VALUE_SEPARATOR = "="; private static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1"; public static List<Item> parse(final URI uri, final String encoding) { List<Item> result = Collections.emptyList(); final String query = uri.getRawQuery(); if (query != null && query.length() > 0) { result = new ArrayList<>(); parse(result, new Scanner(query), encoding); } return result; } public static void parse(final List<Item> parameters, final Scanner scanner, final String encoding) { scanner.useDelimiter(PARAMETER_SEPARATOR); while (scanner.hasNext()) { final String[] nameValue = scanner.next().split(NAME_VALUE_SEPARATOR); if (nameValue.length == 0 || nameValue.length > 2) throw new IllegalArgumentException("bad parameter"); final String name = decode(nameValue[0], encoding); String value = null; if (nameValue.length == 2) value = decode(nameValue[1], encoding); parameters.add(new Item(name, value)); } } private static String decode (final String content, final String encoding) { try { return URLDecoder.decode(content, encoding != null ? encoding : DEFAULT_CONTENT_CHARSET); } catch (UnsupportedEncodingException problem) { throw new IllegalArgumentException(problem); } } } public class Item { private String name; private String value; public Item(String n, String v) { name = n; value = v; } public String getName() { return name; } public String getValue() { return value; } } 

Mi solución rápida y sucia era reemplazar el código heredado con

  Uri uri = Uri.parse("?" + extras); for (String itemName : uri.getQueryParameterNames()) results.put(itemName, uri.getQueryParameter(itemName)); 

Métodos llamados decodeExtras () aparecen en dos lugares en el LVL, y su código difiere. No hay necesidad de llegar con código personalizado detallado – android.net.Uri ofrece funcionalidad similar, y los reemplazos a continuación trabajan para el nivel 11 de la API (Honeycomb) y superiores.

Para APKExpansionPolicy:

 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; } 

Para ServerManagedPolicy:

 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) { results.put(parameterName, uri.getQueryParameter(parameterName)); } return results; } 

He encontrado la versión actualizada en https://github.com/google/play-licensing , el problema se soluciona con URIQueryDecoder

  • Android 5.1.1 y superior - getRunningAppProcesses () sólo devuelve mi paquete de aplicaciones
  • Método FloatMath.sqrt () no encontrado
  • Cómo dar permiso de superposición de pantalla en mi actividad
  • Android M onRequestPermissionsResult en no actividad
  • GetAccountsByType no devuelve nada en marshmallow
  • Android 6.0 no está autorizado a actualizar la red inalámbrica cuando se reinstala la aplicación
  • Android M: Canvas strokeWidth y strokeStyle problema al dibujar arcos
  • Android: utiliza la API de huellas dactilares en la API de Android 17
  • Prueba de espera y modo de espera
  • No se puede obtener el permiso de WRITE_SETTINGS
  • Error de permiso de almacenamiento en Marshmallow
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.