该错误表明未找到URLEncodedUtils
。有没有解决方法。
Caused by java.lang.ClassNotFoundException
Didn't find class "org.apache.http.client.utils.URLEncodedUtils" on path: DexPathList[[zip file "/data/app/com.app.p-MY70To6m946K0_uiYLCsSg==/base.apk"],nativeLibraryDirectories=[/data/app/com.app.p-MY70To6m946K0_uiYLCsSg==/lib/arm64, /data/app/com.app.p-MY70To6m946K0_uiYLCsSg==/base.apk!/lib/arm64-v8a, /system/lib64]]
答案 0 :(得分:2)
Apache库已被删除。如果您以前使用
build.gradle
在您的<uses-library android:name="org.apache.http.legacy" android:required="false"/>
中,它不再适用于Android Pie。
相反,您必须添加
AndroidManifest
发送到您的include "inc_default_".strtolower($Lang).".php"
。
有关正式发行说明,请参见here
答案 1 :(得分:1)
我想知道Pie上是否仍然可以使用它,但是除了另一个可能重复的问题的建议之外,还有一个Gradle配置:useLibrary 'org.apache.http.legacy'
,以便使用旧式类(虽然仍然可用) 。否则,通常来说,迁移到okhttp3
仍然是最佳选择。
答案 2 :(得分:1)
Google不支持旧版apache库,因此在原始类APKEpansionPolicy
中,此方法使用URLEncodedUtils
和NameValuePair
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;
}
用这段拆分查询并使用Map
而不是NameValuePair
的代码替换此方法和该类中的其他方法。
private Map<String, String> decodeExtras(String extras) {
Map<String, String> results = new HashMap<String, String>();
try {
URI rawExtras = new URI("?" + extras);
Map<String, String> extraList = splitQuery(new URL(rawExtras.toString()));
for (Map.Entry<String, String> entry : extraList.entrySet())
{
String name = entry.getKey();
int i = 0;
while (results.containsKey(name)) {
name = entry.getKey() + ++i;
}
results.put(name, entry.getValue());
}
} catch (URISyntaxException e) {
Log.w(TAG, "Invalid syntax error while decoding extras data from server.");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return results;
}
public static Map<String, String> splitQuery(URL url) throws UnsupportedEncodingException {
Map<String, String> query_pairs = new LinkedHashMap<String, String>();
String query = url.getQuery();
String[] pairs = query.split("&");
for (String pair : pairs) {
int idx = pair.indexOf("=");
query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));
}
return query_pairs;
}