2015-08-20 11 views
16

एलएफएल लाइब्रेरी एंड्रॉइड मार्शमलो पर अब संकलित नहीं है क्योंकि अपर्याप्त सामानों की कमी हुई है। आप useLibrary 'org.apache.http.legacy जोड़ सकते हैं लेकिन यह केवल एक अस्थायी कामकाज है।एलवीएल लाइब्रेरी और एंड्रॉइड मार्शमलो

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 और URLEncodedUtils नहीं पाए जाते हैं: समस्या यह विधि है।

नया "way" क्या है? मैं इस कॉल को नए एंड्रॉइड संस्करण के अनुरूप नए कोड के साथ कैसे बदल सकता हूं?

+0

गूगल https पर एक ही चर्चा के साथ तय हो गई है: // कोड। google.com/p/android/issues/detail?id=183386 – dira

+0

हाँ, लेकिन इसे डुप्लिकेट के रूप में बंद कर दिया गया है और अन्य समस्या को भी गलत के रूप में बंद कर दिया गया है फोरम ...... और इतना? – greywolf82

+0

यदि आप इसे प्राप्त करते हैं तो कृपया समाधान पोस्ट करें .... अगर मैं इसे प्राप्त करता हूं तो मैं वही करूँगा .... – dira

उत्तर

10

मैं के रूप में अस्थायी समाधान के अपने ही वर्ग मूल कोड को देखकर लिखा है:

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

Whew! धन्यवाद! यह कामकाज मेरे लिए काम किया। हालांकि मैं पूरी तरह से निश्चित नहीं हूं कि क्यों Google के क्यूए ने एलवीएल का पता नहीं लगाया है, मार्शमलो के पूर्वावलोकन के दौरान भी _compile_ नहीं आधिकारिक लॉन्च के बाद अकेले रहने दें। सौभाग्य से, एलवीएल ओपन सोर्स है। अब तीसरे पक्ष को पकड़ने के लिए भी। – DevByStarlight

+0

उह! एलवीएल अब काम करता है ... लेकिन Google डाउनलोड लाइब्रेरी एक हेयरबॉल को चुराती है। शायद मैं एंड्रॉइड एन तक एपीआई 22 संगतता मोड में रहूंगा ... – DevByStarlight

+0

@ ग्रेवॉल्फ 82 क्या आप इस कक्षा का उपयोग करने के बारे में एक ठोस उदाहरण दिखा सकते हैं? – DiscDev

3

मेरे त्वरित और गंदी समाधान

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

तरीके नामित decodeExtras साथ विरासत कोड को बदलने के लिए था() शो एलवीएल में दो स्थानों पर, और उनका कोड अलग है। वर्बोज़ कस्टम कोड के साथ आने की आवश्यकता नहीं है - android.net.Uri समान कार्यक्षमता प्रदान करता है, और नीचे प्रतिस्थापन एपीआई स्तर 11 (हनीकॉम) और ऊपर के लिए काम करता है।

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

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

यह सबसे आसान तय था। –

संबंधित मुद्दे