You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio报Could not execute method for android:onClick错误求助

问题排查与修复方案

核心崩溃原因

崩溃日志中最底层的报错为 java.lang.ClassCastException: net.sourceforge.jtds.jdbc.JtdsConnection cannot be cast to com.example.acam_try_2.Connection_to_Cities,原因是数据库连接类的返回值类型写错,强行把JDBC原生连接对象转为自定义类,类型不兼容直接触发崩溃。除此之外还有两处配置错误会导致后续功能异常,统一修复如下:


修复步骤

1. 修复数据库连接类 Connection_to_Cities.java

修改conclass方法的返回值类型为JDBC原生Connection,移除错误的强转逻辑:

package com.example.acam_try_2;
import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.util.Log;

import java.sql.Connection;
import java.sql.DriverManager;

public class Connection_to_Cities {
    String ip,port,db,un,pass;

    @SuppressLint("NewApi")
    // 返回值改为原生Connection类型
    public Connection conclass(){
        ip="192.168.3.10";
        db="Cities_names";
        un="Stefan";
        pass="stefan";
        port="1433";
        StrictMode.ThreadPolicy tpolicy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(tpolicy);
        Connection con =null;
        String ConnectionURL=null;
        try
        {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            ConnectionURL= "jdbc:jtds:sqlserver://"+ip+":"+port+";"+"databaseName="+ db+ ";user="+un+";password="+pass+";";
            con= DriverManager.getConnection(ConnectionURL);
        }
        catch (Exception ex)
        {
            Log.e("ConnectionError : ", ex.getMessage());
        }
        // 直接返回原生连接对象,不要强转自定义类
        return con;
    }
}

2. 修复HomeActivity.java的适配器配置

你当前的SimpleAdapter的from参数把两个字段名写到了同一个字符串里,和ListItem中存入的键名不匹配,同时要注意方法名和布局onClick属性的大小写一致:

// 注意:如果布局中按钮的android:onClick属性写的是getData,方法名要改成小写g开头的getData
public void GetData(View v)
{
    ListView lstview=(ListView) findViewById(R.id.listView1);

    List<Map<String,String>> Mydatalist=null;
    ListItem Mydata=new ListItem();
    Mydatalist=Mydata.getlist();
    // 修复from数组:两个键名分开写,和ListItem中put的键名完全一致
    String [] Fromw= {"City_name","City_id"};
    int[] Tow={R.id.City_name,R.id.City_id};
    ad=new SimpleAdapter(HomeActivity.this,Mydatalist,R.layout.listlayout,Fromw,Tow);
    lstview.setAdapter(ad);
}

3. 可选优化(避免后续显示异常)

修改列表项布局listlayout.xml的根布局高度为wrap_content,否则每个列表项会占满全屏:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:tools="http://schemas.android.com/tools">
    <!-- 其余布局内容不变 -->

注意:当前用StrictMode允许主线程网络请求仅适合测试使用,正式开发请将数据库请求逻辑放到子线程/ViewModel中执行,避免触发ANR。


内容的提问来源于stack exchange,提问作者Ștefan Tătărucă

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:15:05