java - IllegalAccessError 仅适用于 AsyncTask 内的 Android 9

标签 java android exception android-asynctask illegalaccessexception

IllegalAccessError 仅在 Android 9 上的 AsyncTask 函数期间发生

Android 9 有什么可做的吗?所有其他版本都可以。

在生产应用程序中出现错误。

我已经尝试将所有内容公开,并且放在同一个包中。这个错误在版本 9 上仍然存在。

    new TestTask(this, "test", true).execute(value);

public class TestTask extends AsyncTask<String, Void, String> {

    private String param1;
    private boolean param2;
    private String number;
    private WeakReference<Context> appReference;

    TestTask(Context context, String param1, boolean param2) {
        this.appReference = new WeakReference<>(context);
        this.param1 = param1;
        this.param2 = param2;
    }

    @Override
    public String doInBackground(String... values) {
        try {
            number = values[0];

            if(param2)
                performVib();

            ResponseEvent response = new TestSnmp(param1).set(number);

        if( appReference.get()!=null && m_debugMode) {
            Toast.makeText(appReference.get(), "Response: " + response, Toast.LENGTH_SHORT).show();
        }


        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public void onPostExecute(String result) {
        super.onPostExecute(result);
        try {
            if( appReference.get()!=null ) {
                Toast.makeText(appReference.get(), "Some text", Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这是堆栈:

java.lang.RuntimeException: 
  at android.os.AsyncTask$3.done (AsyncTask.java:354)
  at java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:383)
  at java.util.concurrent.FutureTask.setException (FutureTask.java:252)
  at java.util.concurrent.FutureTask.run (FutureTask.java:271)
  at android.os.AsyncTask$SerialExecutor$1.run (AsyncTask.java:245)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
  at java.lang.Thread.run (Thread.java:764)
Caused by: java.lang.IllegalAccessError: 
  at xxx.TestTask.doInBackground (TestTask.java)
  at xxx.TestTask.doInBackground (TestTask.java)
  at android.os.AsyncTask$2.call (AsyncTask.java:333)
  at java.util.concurrent.FutureTask.run (FutureTask.java:266)
  at android.os.AsyncTask$SerialExecutor$1.run (AsyncTask.java:245)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
  at java.lang.Thread.run (Thread.java:764)

最佳答案

我将构造函数从 BboxSend 更改为 TestTask 并在 Android 9 上运行代码。它正在工作。

关于java - IllegalAccessError 仅适用于 AsyncTask 内的 Android 9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56395215/

相关文章:

java - 如何从java中的相同正则表达式模式获得多个答案

java - JAVA中通过ref、double、Double传递参数

android - pdfkit 类似于 Android 的快速 pdfkit

android - 无法使用 fstream 和 ifstream 在 NDK C++ 中读取文件

c++ - Windows默默捕捉到的异常,如何手动处理?

java - 检查外部长期 jar 是否成功启动的优雅方法

java - 在 JavaFX 中将 double 绑定(bind)转换为 double 值

android - MediaPlayer 在暂停或 seekTo 后不继续显示字幕 (.SRT)

Java 反射 API 包装器(该死的检查异常困惑)

java - 如果发生检查异常返回什么?