Android开发:kotlin封装 Intent 跳转Activity,报ActivityNotFoundException 问题

抬头图片

Android开发:kotlin封装 Intent 跳转Activity,报ActivityNotFoundException 问题

  • 前言
  • 起因
  • 问题
  • 解决
    • 方法一:
    • 方法二:
  • 总结

前言

近期用kotlin进行项目开发,写了挺多次跳转Activity页面代码,发现和Java有一点不一致,但是可不可以和Java一样封装起来方便调用呢?对此,我找了chatGPT聊了聊,他给出了答案,然后我就 CV大法这么用了,结果报出了一个不可思议的问题:ActivityNotFoundException,经过一系列检查,最终解决,特此记录一下。如果你很急,但是你先别急,直接点击目录 解决段落 可查看解决方法,起因段落问题段落 都是吹水,只贪图一乐。

起因

  • 起因段落

在一个阴雨绵绵的下午,在版本迭代之后,暂时没有开发任务的我。看了看之前迭代的代码。找找有没有可以优化的点。然后想起来了之前跳转Activity还没有封装。这怎么能行呢。然后就打开了 chatGPT,问了问他:

在这里插入图片描述
好家伙,不看不知道,一看吓一跳,不得使用我们的CV大法搞一下? 一顿操作之后。把它集成到项目中了,并且优化了一下一下:


/*** 带参数跳转的Activity  如:startActivity<TestActivity>()** @param [T]跳转的Activity* @param [data]携带的数据  可为空*/
inline fun <reified T : Activity> Context.startActivity(data: Bundle? = null) {val intent = Intent(this, T::class.java)if (data != null) {intent.putExtras(data)}this.startActivity(intent)}

OK,CV大法已经搞定了,那么我们就可以正式开始使用了。

问题

  • 问题段落

不得不说的是,这确实很简洁,看起来一目了然,下面示例是在fragment页面中使用的,所以会有 requireContext() 的前缀,如果是在Activity,可直接使用 startActivity<目标Activity>() 方法,注意的是因为命名和安卓自带的一样,需要区分。

override fun onClick(view: View?) {view ?: returnwhen (view.id) {R.id.lin_my_about -> {//仅打开requireContext().startActivity<TestActivity>()//传值val bundle = Bundle()bundle.putString("test","test")requireContext().startActivity<TestActivity>(bundle)}}}

正当我兴高采烈的构建项目,打包到虚拟机的时候,不出意外的话,意外就要发生了。当我小心翼翼的点击跳转按钮······>

在这里插入图片描述
what? App居然闪退了,这是什么情况?这仅仅是一个跳转代码哇,而且也就这么几行,也没有写什么东西哇,妈耶,怎么它就闪退了。这个东西这么不争气的吗······ 脑子里不断翻滚,但是既然闪退了,就有异常抛出,俺们去log日志看看:

在这里插入图片描述

wtf? 找不到Activity异常?没有在AndroidManifest.xml 里面注册?这么低级的错误?不会吧不会吧,真的不会是没有注册吧?

在这里插入图片描述
查看代码,发现AndroidManifest.xml 文件里面是有的,what? 那究竟是什么问题?难道是系统出故障了?仔细想想,应该不会是系统的问题,应该我我们的代码问题,可是就这么几行代码,咋就不行了呢?为此,我们用最基本的系统自带方法试试。

    startActivity(Intent(requireContext(),TestActivity::class.java))

当我们使用系统方法的时候,页面正常跳转了。这能百分之百确定,就是我们写的代码有问题了。我们再来仔细看看报错的问题,

android.content.ActivityNotFoundException: Unable to find explicit activity class {leo.study.kotlin_mvp_demo/int}; have you declared this activity in your AndroidManifest.xml?

仔细一看,这个 {leo.study.kotlin_mvp_demo/int} 好像不对,都不是一个Activity的路径。

在这里插入图片描述
报错路径后面接了一个 Int 一个整型,确实很离谱。然后继续问chatGPT,给的答案并不符合我们的预期,果然它也并不是万能的,可能我们问的不够细致。

在这里插入图片描述在这里插入图片描述
不过 what ever ,已经无所谓了。其实chatGPT也说明白了,应该就是我们封装的那段代码出现了问题,我们再来仔细看下我们写的封装代码。

在这里插入图片描述
咋一看是没有什么问题,我只是修改了一下,增加了 Bundle() 传值,将 Aactivity 修改为了 Context其他基本就没有变化了啊。到底是什么问题呢?
秉承着“事出必有因”,“邪乎到家必有鬼”,“皮裤套棉裤,必定有缘故” 的原则,我们再仔细看看这报错和封装代码,发挥24K黄金单生狗眼的功力,好像真的发现了一点点蛛丝马迹。各位看官们发现了吗?

在这里插入图片描述

第一个 T 是灰色的,意味着没有调用,第二个 T 是斜体。貌似这两个货,不是同一个东西哇。为了确定这个观点,我 “command+单击” 进入了这个斜体 T 里,发现了一个新大陆。

在这里插入图片描述

原来斜体 T 指代的是这个玩意儿,那就怪不得会报错啦~~~~~~ 造成这样子的原因就是俺的 安卓死丢丢 开了自动导包,然后复制chatGPT的代码,自动导包了这个类当中的 T

解决

  • 解决段落

方法一:

俺们知道,我们所写的这个 T 是一个泛型,指代的是将要跳转的目标 Activity 那么其实解决这个问题,就十分简单了。我们只需要把指代泛型的这个 T 修改成别的字母就好啦。


/*** 带参数跳转的Activity  如:startAct<TestActivity>()** @param [A]            跳转的 Activity* @param [data]         携带的数据  可为空* @param [requestCode]  请求 code 当不为0时,startActivityForResult*/
inline fun <reified A : Activity> Context.startActivity(data: Bundle? = null,requestCode: Int? = 0
) {val intent = Intent(this, A::class.java)if (data != null) {intent.putExtras(data)}if (requestCode != 0) {requestCode?.let { (this as Activity).startActivityForResult(intent, it) }} else {this.startActivity(intent)}}

我们这时候在看看这个 泛型所指代的 A 已经变成同一样的红色了。那么到这里,这个开篇的问题,就解决了。赶快给自己鼓个掌,毕竟,“又过了一天,已经很不错了。”

在这里插入图片描述

方法二:

既然我们已经知道,出现这个问题主要是导错包,而导致的。那么我们将 import 导包的那一行删除,也是可行的。

在这里插入图片描述
删除之后代码:


/*** 带参数跳转的Activity  如:startAct<TestActivity>()** @param [T]            跳转的 Activity* @param [data]         携带的数据  可为空* @param [requestCode]  请求 code 当不为0时,startActivityForResult*/
inline fun <reified T : Activity> Context.startActivity(data: Bundle? = null,requestCode: Int? = 0
) {val intent = Intent(this, T::class.java)if (data != null) {intent.putExtras(data)}if (requestCode != 0) {requestCode?.let { (this as Activity).startActivityForResult(intent, it) }} else {this.startActivity(intent)}}

总结

以上就是本片文章的全部内容啦。纵观全文,本篇文章也就是解决段落有一点点干货。其他都是吹水。可能别人同学没有出现这样的问题。但是,正所谓吃一堑长一智,还是那句话:“邪乎到家,必有鬼” 起因和问题的编写,主要是记录俺发现问题,解决问题的思路历程。现在来看虽然好像仅仅只是两三段的文字描写完的,但是俺在当时的时候,心里不知道喊过多少次的 “wtf”。特别是当俺在使用系统的 startActivity() 方法又正常跳转的时候,俺直接怀疑人生。

一锅老鼠屎,坏了一锅粥。就好比这个小小的大写泛型 T ,还真是挺让人烦心的。

有错误或者不对的地方,欢迎指出
抬头图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2257.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓APP源码和设计报告——运动健身教学

实 验 报 告 课程名称 实验名称 指导教师 专业 班级 学号 姓名 目 录 一、设计背景31. 需求分析32. 课题研究的目的和意义3二、系统需求分析与开发环境31. 系统功能需求32.系统界面需求43.开发环境4三、系统设计4四、系统测试51.脑模拟器测试6五、总结与展望6六、重要…

安卓APP源码和设计报告——仿淘宝水果商城

项目名称 仿淘宝水果商城项目概述 随着互联网技术地高速发展&#xff0c;计算机进入到每一个人的生活里&#xff0c;从人们的生活方式到整个社会的运转都产生了巨大的变革&#xff0c;而在信息技术发达的今天&#xff0c;互联网的各种娱乐方式都在渗透到人们的生活方式之中&am…

对标ChatGPT3.5,支持手机电脑网页使用,无需魔法

说到 Claude 是什么&#xff0c;大家可能没听说过。 但是说到 OpenAI&#xff0c;说到 ChatGPT&#xff0c;相信大家一定听说过&#xff0c;玩过。 PS&#xff1a;关于 Claude 网页版的注册教程&#xff0c;我之前已经写过文章了&#xff0c;现在额外介绍如何使用手机App和电脑…

安卓调试|一文归纳总结adb调试工具常规命令

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&…

安卓APP源码和报告——学生信息管理系统

学生信息管理系统APP演示视频 《移动开发技术II》实践考核方案 适用网络工程&#xff08;网络软件开发&#xff09;2018级 一、考核内容&#xff1a; 环境配置及移动开发生命周期、控件的使用、用户界面设计、数据存储与访问、广播、服务、网络编程、蓝牙应用等知识点。 二…

hnust 湖南科技大学 2023 安卓 期中考试 复习资料

前言 ★&#xff1a;录音中提到的✦&#xff1a;推测考点致谢&#xff1a;hwl&#xff0c;lqx&#xff0c;ly&#xff0c;sw重点来源&#xff1a;7-8班 PPT和录音内容来源&#xff1a;PPT知识点大多很抽象&#xff0c;需要联系实际代码来理解多做1-9章课后习题&#xff0c;编程…

chatgpt API key 获取及延续

目录 问题描述API key 获取API key 延续注册虚拟卡虚拟卡绑定openAI 账户虚拟卡注销参考链接 问题描述 chatgpt目前已被很多人作为辅助工具&#xff0c;使用openai开放的api进行请求与应用chatgpt成为一种十分便利的操作 API key 获取 网址&#xff1a;https://openai.com/p…

安卓期末大作业——图书信息管理系统

前言 随着信息技术的高速发展&#xff0c;科技逐渐走进各行各业&#xff0c;帮助人们快速、便利地完成一些工作。BMS系统是基于Android移动设备的应用软件&#xff0c;该系统能够帮助用户在家里通过手机查看相应图书馆的馆藏情况&#xff0c;而不用到图书馆中查找。同时该系统…

安卓APP源码和设计报告——麻雀笔记

目录 一 安卓应用程序开发背景3 1.1开发背景3 1.2开发环境4 二 安卓应用程序开发理论与方法4 三 记事本应用程序的设计与实现5 3.1 拟解决的问题及目标5 3.2 总体设计6 3.3 详细设计与编码实现6 四 总结23 一 安卓应用程序开发背景 1.1开发背景 1.智能手机的市场 …

安卓APP源码和设计报告——好再来点餐

大作业文档 项目名称&#xff1a;好再来点餐专业&#xff1a;班级&#xff1a;学号&#xff1a;姓名&#xff1a; 目 录 一、项目功能介绍3 二、项目运行环境3 1、开发环境3 2、运行环境3 3、是否需要联网3 三、项目配置文件及工程结构3 1、工程配置文件3 2、工程结构…

来打卡!吴恩达3门AI新课;我用AI出版97本书;如何在创业小厂做技术领导;手把手教你用SD写好提示词 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 「讯飞听见会写」开放内测申请&#xff0c;基于AI的文件内容处理 「讯飞听见会写」是讯飞「星火认知大模型」的个人示范应用产品&…

安卓APP源码和设计报告——基于Android的垃圾分类系统

《移动应用开发》大作业报告 题 目基于Android的垃圾分类系统系 部班 级学 生 姓 名学 号指 导 教 师时 间 1、项目名称 垃圾分类系统 2、项目概述 近些年&#xff0c;由于人民生活水平是的提高&#xff0c;生活方式与生活节奏的加快&#xff0c;使我国的垃圾生产数量已远…

安卓期末大作业——购物商城(源码+18页报告)

Android系统原理及应用报告 题 目&#xff1a; 学 号&#xff1a; 班 级&#xff1a; 姓 名&#xff1a; 完成时间 报告要求须知 项目报告按照实践开发实际情况编写&#xff0c;着重工程项目的需求分析、系统功能分析及模块图、数据库及E-…

安卓APP源码和报告——音乐播放器

课 程 设 计 报 告 院 系&#xff1a;专 业&#xff1a;题 目&#xff1a;科 目&#xff1a;学 生&#xff1a;指导教师&#xff1a;完成时间&#xff1a; 目 录 1. 引言1 1.1 目的1 1.2 背景1 2. 需求分析1 3. 系统设计1 3.1总体设计1 3.2功能设计1 4. 系统开发2 4.1…

【AIGC使用教程】Notion AI 从注册到体验:如何免费使用

欢迎关注【AIGC使用教程】 专栏 【AIGC使用教程】SciSpace 论文阅读神器 【AIGC使用教程】Microsoft Edge/Bing Chat 注册使用完全指南 【AIGC使用教程】GitHub Copilot 免费注册及在 VS Code 中的安装使用 【AIGC使用教程】GitHub Copilot 免费注册及在 PyCharm 中的安装使用 …

体验不了ChatGPT?来试试POE桌面版!

POE Poe App目前备受欢迎&#xff0c;许多用户已开始使用加入ChatGPT API后引入的聊天机器人。最早在App Store推出&#xff0c;目前Poe App还没有推出针对Android用户的版本&#xff0c;但今天poe.com推出了桌面版&#xff0c;Android用户也可以通过桌面浏览器使用ChatGPT。需…

推特、微博对手Threads软件的下载、注册、使用最新超详细教程

经过马斯克不断折腾&#xff0c;推特面临用户大量流失的风险&#xff0c;尤其近期限制推文阅读量&#xff0c;更是导致大量用户出走。 于是乎&#xff0c;Meta公司7月6日正式发布对标推特的新社交平台 Threads&#xff0c;当前Threads只能在 iOS、Android 平台上安装 APP 使用&…

【ChatGPT+MindShow高效生成PPT,保姆级安装教程】

&#x1f680; AI破局先行者 &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#x1f3c6;&am…

安卓期末大作业——日记APP

2022/2023 学年 第 一 学期 课程设计 实验报告 模 块 名 称 Android课程设计 专 业 通信工程&#xff08;嵌入式培养&#xff09; 学 生 班 级 学 生 学 号 学 生 姓 名 指 导 教 师 设计题目熟悉adt-bundle-windows-x86或android-studio-ide应用开发环境&#xff1a;安…

手把手教你怎么搭建自己的ChatGPT和Midjourney绘图(含源码)

AI程序采用NUXT3LARAVEL9开发&#xff08;目前版本V1.1.7&#xff09; 授权方式&#xff1a;三个顶级域名两次更换 1.AI智能对话-对接官方和官方反代&#xff08;markdown输出&#xff09;PS:采用百度与自用库检测文字 2.AI绘图-根据关键词绘图-增加dreamStudio绘画-增加mid…