java-如何在Android BroadcastReceiver中使用Jsoup时解决“ UnsatisfiedLinkError”问题?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何在Android BroadcastReceiver中使用Jsoup时解决“ UnsatisfiedLinkError”问题?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6039字,纯文字阅读大概需要9分钟。
内容图文
![java-如何在Android BroadcastReceiver中使用Jsoup时解决“ UnsatisfiedLinkError”问题?](/upload/InfoBanner/zyjiaocheng/668/cebcc4798d5c47e6baf0d49efdeacc78.jpg)
我在做什么:
在我的应用程序(具有minSdkVersion 15的Android)中,我有一个BroadcastReceiver,它可以监听Intent.ACTION_PACKAGE_ADDED(设备上已安装了新的应用程序包).每当发生这种情况时,接收器都会尝试使用Jsoup从Internet上获取一些数据.
问题:
只要我在安装其他应用程序时(例如从Play商店中)运行我的应用程序,以下代码就可以正常运行.但是,如果我杀死我的应用程序,然后安装另一个应用程序,则我的应用程序将崩溃,并显示“我的应用程序已停止”对话框(因为我的接收器崩溃了)以及此错误:
No implementation found for long com.android.tools.profiler.support.network.HttpTracker$Connection.nextId() (tried Java_com_android_tools_profiler_support_network_HttpTracker_00024Connection_nextId and Java_com_android_tools_profiler_support_network_HttpTracker_00024Connection_nextId__)
FATAL EXCEPTION: AsyncTask #1
Process: com.myorg.myapp, PID: 11796
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.UnsatisfiedLinkError: No implementation found for long com.android.tools.profiler.support.network.HttpTracker$Connection.nextId() (tried Java_com_android_tools_profiler_support_network_HttpTracker_00024Connection_nextId and Java_com_android_tools_profiler_support_network_HttpTracker_00024Connection_nextId__)
at com.android.tools.profiler.support.network.HttpTracker$Connection.nextId(Native Method)
at com.android.tools.profiler.support.network.HttpTracker$Connection.<init>(HttpTracker.java:191)
at com.android.tools.profiler.support.network.HttpTracker$Connection.<init>(HttpTracker.java:186)
at com.android.tools.profiler.support.network.HttpTracker.trackConnection(HttpTracker.java:280)
at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.<init>(TrackedHttpURLConnection.java:49)
at com.android.tools.profiler.support.network.httpurl.HttpsURLConnection$.<init>(HttpsURLConnection$.java:50)
at com.android.tools.profiler.support.network.httpurl.HttpURLWrapper.wrapURLConnectionHelper(HttpURLWrapper.java:40)
at com.android.tools.profiler.support.network.httpurl.HttpURLWrapper.wrapURLConnection(HttpURLWrapper.java:55)
at org.jsoup.helper.HttpConnection$Response.createConnection(HttpConnection.java:889)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:727)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:706)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:299)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:288)
at com.myorg.myapp.InstallReceiver$PlayStoreFetcher.doInBackground(InstallReceiver.java:76)
at com.myorg.myapp.InstallReceiver$PlayStoreFetcher.doInBackground(InstallReceiver.java:70)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)?
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
我的代码:
InstallReceiver.java:
public class InstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
String data = new FetchData().execute("URL").get();
// The rest of my code...
}
}
private static class FetchData extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... strings) {
try {
// This is the cause of the problem
return Jsoup.connect(strings[0]).get().text();
} catch (Exception e) {
return null;
}
}
}
}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myorg.myapp">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Activities.PlayStoreActivity"/>
<activity android:name=".Activities.InstalledAppsActivity"/>
<activity android:name=".Activities.PredefinedFiltersActivity"/>
// This is linking my InstallReceiver.java
<receiver android:name=".InstallReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
</application>
</manifest>
build.gradle:
dependencies {
compile 'org.jsoup:jsoup:1.11.2'
// The rest of my dependencies...
}
我的尝试:
>我已经在Jsoup调用中加入了通用catch(Exception e)语句,但是仍然抛出错误.
>我查找了此错误,并找到了诸如this one和this one之类的答案,但它们似乎都无法解决我的问题.
>我将Jsoup调用移到IntentService并从我的InstallReceiver启动了该服务,但是仍然抛出了同样的错误(来自该服务).
>尝试使用(new URL(url)).openConnection()获取HTML,并得到了相同的错误,但是现在由于URLConnection而不是Jsoup了.
>使用Thread类而不是AsyncTask,但仍然出现相同的错误.
我的尝试表明该错误与Jsoup并没有真正的关系,它与应用程序未运行时从接收器连接到Internet有关!
我猜测此HttpTracker $Connection.nextId()出现导入问题,这是在我的应用未运行时发生的.
任何想法如何解决这个问题?
解决方法:
当您尝试读取不存在的dll / so文件时,通常会发生这种情况.
由于您的工作非常标准,因此问题可能出在android studio而不是您的代码上.
要解决它-只需将最小sdk提高到20(或更高).
(高级网络探查器崩溃,因为版本20不支持它).
内容总结
以上是互联网集市为您收集整理的java-如何在Android BroadcastReceiver中使用Jsoup时解决“ UnsatisfiedLinkError”问题?全部内容,希望文章能够帮你解决java-如何在Android BroadcastReceiver中使用Jsoup时解决“ UnsatisfiedLinkError”问题?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。