安卓Kotlin开发findViewById未解析引用及本地文件存储实现问题
问题修复方案
1. 未解析引用报错解决
你已经在项目中启用了View Binding,并且已经初始化了binding实例,完全不需要调用findViewById,两种修复方案二选一:
- 推荐方案:直接通过
binding对象获取控件,删除所有findViewById相关代码,避免id引用错误 - 备选方案:如果要继续使用
findViewById,检查代码头部的import语句,确认导入的是当前项目的R类(格式为import 你的应用包名.R),不要导入系统默认的android.R,修改后clean项目再重新构建即可。
2. 业务逻辑修正
你当前把读取输入、写入文件的逻辑直接写在了onCreate方法中,页面启动时就会直接执行,此时用户还没有输入内容、也没有点击按钮,完全不符合需求,需要把这部分逻辑移到按钮点击事件的回调中。
3. 文件写入路径适配
安卓系统不支持直接写入相对路径的文件,建议使用系统提供的应用沙盒目录API,不需要申请额外权限即可写入,稳定性更高。
修改后可运行的完整代码
class LoginPage : AppCompatActivity() { private lateinit var binding: ActivityLoginPageBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityLoginPageBinding.inflate(layoutInflater) setContentView(binding.root) // XML中的login_button会自动转驼峰为loginButton,直接通过binding调用 binding.loginButton.setOnClickListener { // 点击按钮时再读取输入框内容 val username = binding.username.text.toString() if (username.isNotBlank()) { // 写入应用内置files目录,无需额外权限 val userFile = File(filesDir, "current_users.txt") userFile.appendText("$username\n") } startActivity(Intent(this, MainActivity::class.java)) } } }
注意:没用的appBarConfiguration变量可以删除,避免编译警告
内容的提问来源于stack exchange,提问作者AD202
相关产品推荐
相关产品推荐

