【问题标题】:Android JDBC connection results in ctahttp exceptionAndroid JDBC连接导致ctahttp异常
【发布时间】: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 类是什么。也许有人可以在这里帮助我。

【问题讨论】:

  • 有什么安全的方法可以解决这个问题吗?

标签: android mysql android-studio jdbc


【解决方案1】:

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

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

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

我看到了 5 个解决方案:

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

【讨论】:

    【解决方案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" />

      【讨论】:

        猜你喜欢
        • 2013-06-13
        • 2014-03-17
        • 2012-09-09
        • 1970-01-01
        • 2012-06-03
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多