[已解决] 没有setcontentview 就使用findViewById 创建的变量会出现null exception

Android MVVM实战:LiveData与Data Binding原理与避坑指南 LiveData是Android Jetpack中专为UI生命周期设计的状态观察者,其核心价值在于自动绑定LifecycleOwner并精准解绑,避免内存泄漏;Data Binding则通过编译期生成ViewDataBinding类,将XML声明式逻辑与Java/Kotlin代码解耦,显著提升UI渲染性能与可维护性。二者协同构成轻量、稳定、易调试的MVVM落地方案,特别适用于电商、金融等对稳定性与迭代效率要求严苛的商用App开发。本文聚焦真实项目中的状态管理、双向绑定、生命周期感知及高频编译/运行时问题,提 阅读详情

 

package bjpkten.permissionrelateddemo;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import java.security.Permission;

public class MainActivity extends AppCompatActivity {

    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.text);

    }

    @Override
    protected void onResume() {
        super.onResume();
        mTextView.setText(R.string.app_name);

    }
}

 

 

报错:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: bjpkten.permissionrelateddemo, PID: 23988
    java.lang.RuntimeException: Unable to resume activity {bjpkten.permissionrelateddemo/bjpkten.permissionrelateddemo.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(int)' on a null object reference
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3784)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3816)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(int)' on a null object reference
        at bjpkten.permissionrelateddemo.MainActivity.onResume(MainActivity.java:37)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1412)
        at android.app.Activity.performResume(Activity.java:7292)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3776)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3816) 
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51) 
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

 

Android SQLite数据库开发实战:从SQLiteOpenHelper到DAO模式完整指南 数据持久化是移动应用开发的核心基础,它确保应用数据在会话间得以保存和复用。其实现原理通常依赖于本地数据库技术,通过在设备存储中创建结构化的数据文件来实现。在Android生态中,SQLite作为内嵌的轻量级关系型数据库,因其零配置、单文件管理和系统级集成而成为本地存储的首选方案。这一技术价值在于为应用提供了高效、可靠的结构化数据管理能力,无需网络依赖。其典型应用场景包括用户偏好设置、离线数据缓存、以及笔记、记账等工具类应用的数据存储。本文聚焦于Android Studio中SQLiteOpenHelper的 阅读详情

相关推荐

Android应用启动闪退全链路排查:从Logcat分析到环境配置的实战指南

在Android应用开发中,运行时崩溃是开发者常遇到的挑战,其本质是程序执行过程中发生了未处理的异常或错误。这类问题的核心排查原理在于系统日志机制,Android平台通过Logcat工具实时输出应用和系统的运行日志,其中包含了崩溃时的详细堆栈跟踪信息。掌握日志分析技术对于定位问题具有极高的工程价值,它能帮助开发者快速从表象深入到代码、资源或环境层面的根本原因。在实际开发场景中,启动闪退尤其常见,可能涉及空指针异常、资源ID引用错误、依赖库冲突、清单文件配置缺失或开发环境缓存异常等多个维度。本文聚焦于Andr

weixin_30546189的博客 596

Android 无SetContentView显示页面

今天从github上面下载了eoe的客户端,发现进入SplashActivity时,在onCreate中没有发现以往中的SetContentView,但是页面还是显示了 后来发现SplashActivity 在AndroidManifest.xml里面是这样写的 <activity android:name=".ui.SplashActivi...

dibe49481448的博客 417

Android MVVM实战:LiveData与Data Binding协同原理与避坑指南

LiveData 是 Android 中基于生命周期感知的可观察数据容器,其核心价值在于自动绑定 LifecycleOwner 实现安全通知;Data Binding 则是编译期驱动的 UI 声明式绑定机制,通过生成 Binding 类实现数据与视图的零样板连接。二者并非独立组件,而是 MVVM 架构中分工明确的技术组合:LiveData 负责状态分发的时机控制,Data Binding 负责状态到 UI 的映射执行。这种协同显著降低 findViewById 和手动监听的代码量,提升配置变更(如横竖屏)下

weixin_30787531的博客 503

setContentView方法无效

1, 今天在写一个demo的时候, 突然发现setContentView方法无效, 后来发现是因为发现onCreate方法有两个重载方法, 其中一个有一个参数, 一个有两个参数. 而Activity在启动时, 调用的是只有一个参数的那个onCreate方法, 只有在该方法中调用setContentView方法才有用.  具体如下:   @Override protected voi

a62894310的专栏 3268

Android照片选择器API详解与最佳实践

在Android应用开发中,媒体文件访问是常见的功能需求,而系统级的照片选择器(Photo Picker)API提供了标准化的解决方案。该API基于Activity Result机制实现,通过content URI而非文件路径访问媒体,既保障了用户隐私又简化了权限管理。从技术实现看,它支持单图/多图选择、HDR内容处理等高级特性,同时兼容Android 11及以上版本。对于开发者而言,掌握照片选择器能显著提升应用的用户体验和数据安全性,特别适合社交、电商等需要用户上传图片的场景。通过合理使用持久化URI权限

weixin_30247307的博客 373

Android AutoCompleteTextView 实战指南:从原理到中文拼音匹配

AutoCompleteTextView 是 Android 原生提供的智能输入补全控件,基于 EditText 扩展,内置 ListPopupWindow 与 Filter 机制,实现输入-过滤-展示-选择的闭环交互。其核心原理是通过 Adapter 提供数据源,由 Filter 在后台线程执行轻量级文本匹配(如 contains、startsWith),再安全发布结果至 UI 线程。技术价值在于零依赖、全 API 兼容(API 14+)、低内存占用与高可访问性,特别适合政务、医疗、物流等强稳定性要求场景

diaoju3333的博客 385

mac android创建activity 空指针,NullPointerException空指针异常——没有事先加载布局文件到acitivy——缺少:setContentView(R.layout....

空指针异常:04-27 01:13:57.270: E/AndroidRuntime(4942): FATAL EXCEPTION: main04-27 01:13:57.270: E/AndroidRuntime(4942): Process: com.itheima.mobilesafe74, PID: 494204-27 01:13:57.270: E/AndroidRuntime(4942...

weixin_30603711的博客 439

内存优化--LOGBACK导致内存告警

一.故事背景 由于开辟新市场需要,开发了新的项部署在海外平台,其中最消耗内存的功能是消费kafka消息(最开始预计一天有1千万的量),部署完之后运行一段时间发现出现内存告警问题。 二.分析问题 出现内存告警,(新项目是低配置机器 2C4G * 2台)第一个念头是去查看堆空间设置的情况,看到jvm启动命令中堆空间都是直接指定大小,说明问题不是出在堆空间 -Xmx3g -Xms3g 先不管这些,去查看总的内存使用情况,发现总的内存空间使用将近有92% = 3.68G,那么这多出来使用的0.6

qq_33199919的博客 6051

关于setContentView方法

转载请以链接形式标明出处: 本文出自:103style的博客 base on Android-29 文中相关的源码有删减 可以带着以下问题来看本文: 为什么从代码设置属性和主题,得在 setContentView 之前? setContentView 添加的 View 加载完成的回调方法? setContentView 的执行流程? LayoutInflater 的 inflate 方法不...

103style 5656

从原理到实践:MIPI D-PHY v1.2的HS-Deskew功能全解析(附时序图详解)

本文深入解析MIPI D-PHY v1.2的HS-Deskew功能,从技术背景到实现机制,详细介绍了其在2.5Gbps高速传输中的关键作用。通过时序图详解和实测数据,帮助工程师理解并应用这一技术,解决信号完整性问题,提升系统可靠性。

weixin_30300225的博客 307

TLV320AIC3204音频CODEC硬件设计与调试实战

本文深入解析了TLV320AIC3204音频CODEC的硬件设计与调试实战。文章从芯片功能定位入手,详细阐述了电源时钟设计、模拟输入电路等关键硬件设计要点,并提供了软件驱动配置与分层调试方法,帮助工程师有效规避常见陷阱,解决底噪、失真等典型音频调试问题。

zero1的博客 1122

Android中不得不谈的setContentView

写在前面: 几个月之前在做项目的布局优化时,使用 Hierarchy Viewer 查看项目的层级结构,然后发现顶层的布局并不是在XML中我写的根布局,而是嵌套了多层 Layout ,简单查阅了一些资料之后明白这是系统为我们加上的。把这个知识点写在了印象笔记中的 TODO list(里面还有好多知识想研究,一直在拖延T.T),搁置了好久最近重新拿出来好好研究了一下,争取做到温故知新,融会贯通

小花花的博客 723

MAX96717实战:如何选择Host-to-Peripheral和Pass-Through I2C模式?附配置代码

本文深入解析MAX96717芯片的两种关键I2C模式:Host-to-Peripheral与Pass-Through。通过对比其核心差异、硬件连接考量及软件配置代码,为嵌入式开发者提供了清晰的模式选择策略与实战指南,帮助优化系统设计并避免常见通信故障。

weixin_29190573的博客 460

Android应用集成Facebook登录功能全指南

第三方登录是现代移动应用开发中的关键技术,通过OAuth协议实现用户身份验证,能显著提升用户体验和转化率。Facebook登录作为主流社交登录方案,其技术实现涉及SDK集成、密钥哈希验证和Graph API调用等核心环节。在Android平台集成时,开发者需要配置Facebook开发者应用、处理密钥哈希校验,并实现登录状态管理。该方案特别适用于需要快速获取用户社交资料、降低注册门槛的应用场景,如社交、电商类App。2023年起Facebook强化了数据访问审核要求,开发者需特别注意权限申请和GDPR合规性。

weixin_30940783的博客 390

HFSS的边界条件与激励方式

在电磁场理论学习中我们知道,电磁场问题的求解都归结于麦克斯韦(Maxwell)方程组的求解,在HFSS中波动方程的求解同样是由微分形式的麦克斯韦方程推导出来的。而边界条件定义了求解区域的边界以及不同物体交界处的电磁场特性,是求解麦克斯韦方程的基础。 只有在假定场矢量是单值、有界、并且沿空间连续分布的前提下,微分形式的麦克斯韦方程组才是有效的;而在求解区域的边界,不同介质的交界处和场源处,场矢量是不连续的,那么场的导数也就失去了意义。 边界条件就是定义跨越不连续边界处的电磁场特性,因此,正确地理解、定义并

ASH_GUARDIAN的博客 1万+

开篇词:学习系统分析师的好处?核心考点有哪些?

系统分析师备考指南 系统分析师是IT行业的高级专业人才,具备系统分析与设计能力,能指导开发团队工作。学习系统分析师不仅能获得职业晋升的"黄金跳板",还能全面提升技术架构思维和业务理解能力。 核心价值: 职业发展:晋升管理岗位的硬性要求,突破职业天花板 能力提升:构建T型知识结构,培养架构思维和软技能 市场竞争力:成为"业务+技术"桥梁,获得国家级专业认证 考试内容: 计算机基础知识(硬件、操作系统、网络等) 系统分析专业知识(软件工程、架构设计等) 进阶知识(企业信息

数据知道的博客 5940

Android Spinner Kotlin最佳实践:零依赖下拉控件重学指南

Spinner是Android原生下拉选择控件,基于AdapterView实现,其核心原理是通过ArrayAdapter绑定数据源并响应用户单选事件。凭借零第三方依赖、低内存占用、系统级无障碍支持和声明式XML绑定(android:entries)等技术价值,它在政务、医疗、IoT等强调兼容性(minSdk ≤ 16)、包体敏感(<8MB)及合规性(WCAG AA)的场景中不可替代。相比RecyclerView+PopupWindow或Compose DropdownMenu,Spinner在老版本兼容、渲

axfcjwkbi259888707的博客 404

树莓派 Raspberry Pi 使用 YOLOv8 YOLOv10 YOLOv11进行目标检测及推理加速,Run YOLOv8 YOLOv10 YOLOv11 on Raspberry Pi

libcamera 是 linux 新增加用于访问 camera 的 API。树莓派参与了 libcamera 的开发,并且在新的摄像头软件中开始从依赖于固件的摄像头图像处理管道(Image processing pipeline, ISP)迁移到更加开放的 libcamera。当然这块用USB 摄像头应该也是可以的。

shiter编写程序的艺术 5567

RecyclerView 与 DataBinding 结合的 Android 列表开发最佳实践

RecyclerView 是 Android 官方推荐的列表容器,其核心价值在于可扩展的 LayoutManager 和生命周期友好的架构设计;DataBinding 则通过声明式语法实现 UI 与数据的自动同步,避免 findViewById 和手动刷新等易错操作。二者结合构成现代 Android 列表开发的底层基建,显著提升代码可维护性、UI 响应一致性与团队协作效率。该方案天然支持 ViewModel 生命周期感知、DiffUtil 智能刷新及 BindingAdapter 自定义逻辑扩展,广泛应用于

weixin_33755649的博客 401

Android 9.0 系统framework关于忘记开机锁屏密码进不去系统桌面清除锁屏密码问题的解决

在9.0的系统rom定制化开发中,在一些产品中带锁屏密码的功能中,系统默认是滑动解锁,但是客户会设置锁屏密码,在某些时候会 忘掉锁屏密码,导致需要进入恢复出厂设置然后才能进入系统桌面,这样就导致系统的保存的资料都丢失了,所以需要要求提供接口 在下拉状态栏中或者系统服务中在忘记锁屏密码后不恢复出厂设置的情况下,可以清除锁屏密码,接下来就来实现功能

安卓兼职framework和app工程师的博客 615

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android MVVM实战:LiveData+DataBinding架构避坑指南

MVVM是Android开发中用于解耦UI与业务逻辑的经典架构模式,其核心在于通过可观察数据(如LiveData)驱动声明式UI(如DataBinding),实现生命周期安全、类型安全与响应式更新。LiveData专为Android UI生命周期设计,自动规避内存泄漏与后台更新异常;DataBinding则将数据绑定前置到编译期,消除findViewById、杜绝空指针、提升IDE智能提示与运行时性能。二者组合形成‘数据自驱动UI’闭环,显著降低Fragment臃肿度、减少胶水代码、提升线上稳定性。本文聚焦

weixin_33749131的博客 432

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【JVM】工作中JVM注意事项

JVM学习(一)---Java内存区域与内存溢出异常(一)基本介绍(二)运行时数据区域基本介绍(1)程序计数器(2)Java虚拟机栈(3)本地方法栈(4)Java堆(5)方法区方法区也被称为永久代。方法区和永久代的区分:常用参数为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢?(6)运行时常量池(7)直接内存(四)HotSpot虚拟机对象对象的创建Step1:类加载检...

weixin_44823875的博客 465

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android RecyclerView加载更多实战:从卡顿、重复请求到Paging3优化

RecyclerView 加载更多是 Android 列表分页的核心能力,其本质是滚动行为与数据状态的协同控制。原理上需精准识别滑动临界点、管理 Footer 占位、隔离网络生命周期,并避免 notifyDataSetChange 引发的 UI 卡顿。技术价值在于实现丝滑、稳定、可恢复的无限滚动体验,支撑信息流、电商列表、评论区等高频场景。本文聚焦真实开发痛点——快速滑动触发重复请求、横竖屏重建导致状态丢失、GridLayoutManager 下阈值计算错误,结合 BaseLoadMoreAdapter 封

weixin_30666401的博客 359

安卓启动流程与期间核心组件工作原理

本文以实际工作中出现的启动相关各种千奇百怪的bug为钩子,讲解了安卓app冷启动过程中核心组件的工作原理,pms -> packageParser/androidmanifest.xml -> context -> ams -> application -> activity -> layoutInflater资源加载过程 -> wms /window/WM -> view与viewgroup绘制原理 -> 渲染阶段。理供解决问题的思路,看业务框架代码能看懂他们改的哪块源码,跟他们扯皮能扯赢

mix39的博客 337

Android ListView自定义Adapter实战:复用、内存与动态刷新

ListView是Android早期核心列表控件,其Adapter机制虽被RecyclerView取代,但在老旧系统兼容、低资源设备及存量政务/医疗类App中仍具不可替代性。理解Adapter底层原理——尤其是getView复用逻辑、ViewHolder生命周期管理、notifyDataSetChanged线程安全与数据绑定解耦——是保障列表性能与稳定性的技术基石。本文聚焦Custom Adapter工程实践,深入剖析convertView精准复用、静态ViewHolder防内存泄漏、单Item局部刷新等关

weixin_33862993的博客 398

Android MVVM架构与DataBinding实战指南

MVVM架构模式通过数据绑定技术实现了视图与业务逻辑的解耦,是现代化移动应用开发的核心范式。其核心原理是通过ViewModel层作为中间媒介,将Model层的数据变化自动同步到View层,同时将用户操作反馈回Model层。DataBinding作为Android Jetpack的关键组件,通过编译时生成的绑定类实现类型安全的视图绑定,显著减少了传统findViewById带来的样板代码。在实际工程中,这种技术组合能提升40%以上的开发效率,同时降低60%的UI相关bug。特别适用于需要频繁数据更新的电商、社

dingdi3021的博客 370
上一篇: 【精】google 大会小总结
下一篇: [精] 性能优化 - 1: 布局优化
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值