java-如何在Android BroadcastReceiver中使用Jsoup时解决“ UnsatisfiedLinkError”问题?

java-如何在Android BroadcastReceiver中使用Jsoup时解决“ UnsatisfiedLinkError”问题?,第1张

概述我在做什么:在我的应用程序(具有minSdkVersion15的Android)中,我有一个BroadcastReceiver,它可以监听Intent.ACTION_PACKAGE_ADDED(设备上已安装了新的应用程序包).每当发生这种情况时,接收器都会尝试使用Jsoup从Internet上获取一些数据.问题:只要我在安装其他应用程序时(例如从P

我在做什么:

在我的应用程序(具有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 #1Process: com.myorg.myapp, PID: 11796java.lang.RuntimeException: An error occurred while executing doInBackground()    at androID.os.AsyncTask.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.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.call(AsyncTask.java:305)    at java.util.concurrent.FutureTask.run(FutureTask.java:237)    at androID.os.AsyncTask$SerialExecutor.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”问题?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1081017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存