Android JDBC连接导致ctahttp异常

Posted

技术标签:

【中文标题】Android JDBC连接导致ctahttp异常【英文标题】:Android JDBC connection results in ctahttp exception 【发布时间】:2019-07-04 10:05:11 【问题描述】:

我目前正在尝试建立从我的 android 应用到在我的树莓派上运行的 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)

        
    

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

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

我尝试以不同的方式搜索问题,但我无法找出问题所在。 我什至不知道 cta 类是什么。也许有人可以在这里帮助我。

【问题讨论】:

有什么安全的方法可以解决这个问题吗? 【参考方案1】:

CTA = 中国型式批准,这是联发科在 Android 中添加的用于测试目的的内容。

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

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

我看到了 5 个解决方案:

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

【讨论】:

【参考方案2】:

因为我曾经遇到过同样的消息,所以我首先被它误导了。 但是,事实证明您无法在主线程上打开 Socket 或其他网络连接(请参阅https://developer.android.com/training/basics/network-ops/connecting#intro-net-ops)。这也可能是您的问题。

正如 vhamon 所指出的,这条消息本身似乎只是用于测试目的的信息。

【讨论】:

【参考方案3】:

将此权限添加到 AndroidManifest,希望对您有所帮助)

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

【讨论】:

以上是关于Android JDBC连接导致ctahttp异常的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 JDBC 语句会导致异常?

JDBC07:数据库连接池

Hive JDBC 连接超时

在 jdbc 中使用 localhost 时发现网络连接错误

用jdbc远程连接mysql,报异常

java jdbc连接异常问题数据库