Android JDBC 连接导致 ctahttp 异常

San*_*ent 4 mysql android jdbc android-studio

我目前正在尝试建立从我的 Android 应用程序到在我的 raspberry pi 上运行的 MySQL 服务器的连接。

我通过将库添加到模块菜单中的依赖项来正确地将库添加到 android studio。

我在我的程序中实现了这样的 JDBC 方法。

 public void readDatabase(String query)throws  Exception{

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            connection = DriverManager.getConnection("jdbc:mysql://192.168.0.101/mydb","user","mypassword");

            statement = connection.createStatement();

            resultSet = statement.executeQuery(query);

            System.out.println(resultSet);

        }catch (ClassNotFoundException e){

            e.printStackTrace();

        }finally {
            close();
        }

    }

    private void close(){
        try {
            if (resultSet != null){
                resultSet.close();
            }

            if (statement != null){
                statement.close();
            }

            if ( connection != null){
                connection.close();
            }
        }catch (Exception e){

        }
    }
Run Code Online (Sandbox Code Playgroud)

每次我启动程序时,我都会收到一个找不到类的错误。它说 :

W/System: ClassLoader 引用了未知路径: system/framework/mediatek-cta.jar I/System.out: e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp

我试图以不同的方式搜索问题,但我无法弄清楚问题出在哪里。
我什至不知道 cta 课是什么。也许有人可以在这里帮助我。

vha*_*mon 6

CTA = China Type Approval,这是联发科在 Android 中添加的用于测试目的的东西。

您的错误发生在DriverManager.getConnection() 中,它可能使用Android 的libcore 中的okhttpapache-httpSocket类来执行其请求。

Mediatek 修补了这些库以添加对 HTTP 请求的控制。它尝试动态加载/system/framework/mediatek-cta.jar 中定义的一些方法,但它可能不存在或在您的 android 设备的文件系统上无法访问。

我看到 5 个解决方案:

  1. 如果您使用的是自定义/root ROM,请通过 OTA 或通过 adb remount添加适当的 mediatek-cta.jar
  2. 使用具有相同应用程序源代码的另一台设备(非基于 Mediatek 的设备不会有该问题)。
  3. 通过官方 OTA 更新升级您的操作系统,并希望设备制造商解决该问题。
  4. 通过以下修改 自行重建和自定义操作系统
    • 确保将 medatek-cta 添加到PRODUCT_PACKAGESPRODUCT_BOOT_JARS
    • 删除 libcore、okhttp 和 apache-http 中的钩子。
  5. 请联系您的操作系统维护人员的支持