Android JDBC连接导致ctahttp异常

时间:2019-02-10 22:13:16

标签: android mysql android-studio jdbc

我目前正在尝试建立从我的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类是什么。也许有人可以在这里帮助我。

3 个答案:

答案 0 :(得分:1)

当我一次遇到相同的消息时,我也首先被它误导了。 但是,事实证明您无法在主线程上打开套接字或其他网络连接(请参见https://developer.android.com/training/basics/network-ops/connecting#intro-net-ops)。这可能也是您遇到的问题。

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

答案 1 :(得分:0)

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

您的错误发生在可能使用 okhttp apache-http Socket DriverManager.getConnection()中Android的 libcore 中的>类来执行其请求。

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

我看到5种解决方案:

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

答案 2 :(得分:0)

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

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

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