在Android开发过程中我们可能会遇到程序可以正常安装运行,但是点击某一个按钮的时候,会出现程序闪退的情况或应用被停止,如图所示。
或者是强制关闭,其中的报错是java.lang.classcastexception: xxx.activity_dl cannot be cast to android.view.view$onclicklistener这种情况困扰了我好久,后来我回头看了一下MainActivity的java类,发现是类的接口出现问题了。
错误接口写法是:
button设置监听事件的错误:
其中setOnClickListener()的括号里边应该直接写为this,类AppCompatActivity后边应该连接接口:View.OnClickListener,正确的实例如下图:
登录活动类代码如下:
package com.itheima.test; import androidx.appcompat.app.AppCompatActivity; import android.net.wifi.aware.DiscoverySession; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Activity_dl extends AppCompatActivity implements View.OnClickListener{ private EditText et_edit_yh,et_edit_mm; //用户名,密码输入框 private Button button_dl1; //登录按钮 private UserDao dao; //用户数据库的操作类 private Handler mainHandler; //主线程的定义 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dl); initView(); } public void initView(){ et_edit_yh = findViewById(R.id.edit_yh); et_edit_mm = findViewById(R.id.edit_mm); button_dl1 = findViewById(R.id.button_dl1); dao = new UserDao(); mainHandler = new Handler(getMainLooper()); //获取主线程 button_dl1.setOnClickListener(this); } public void onClick(View v){ switch (v.getId()){ case R.id.button_dl1: doLoging(); break; } } /** * 执行登录操作 */ private void doLoging(){ final String sname = et_edit_yh.getText().toString().trim(); final String spassword = et_edit_mm.getText().toString().trim(); if(TextUtils.isEmpty(sname)){ CommonUtils.showShortMsg(this,"请输入用户名"); et_edit_yh.requestFocus(); }else if (TextUtils.isEmpty(spassword)){ CommonUtils.showShortMsg(this,"请输入用户密码"); et_edit_mm.requestFocus(); }else { new Thread(new Runnable() { @Override public void run() { final Userinfo item = dao.getUserByUnameAndUpass(sname,spassword); mainHandler.post(new Runnable() { @Override public void run() { if (item == null){ CommonUtils.showDlgMsg(Activity_dl.this, "用户名或密码错误"); }else { CommonUtils.showDlgMsg(Activity_dl.this,"登陆成功,进入信息管理"); //调用信息管理界面 } } }); } }).start(); } } }
再次启动项目完成安装就行了。还要注意的是每新建一个活动类都要连接那个接口!