NullPointerException at android.widget.AbsListView.obtainView at android.widget.GridView.onMeasure

本文记录了一次在为GridView设置数据时遇到的空指针异常问题。异常发生在adapter的getView()方法中返回了null值,导致整个应用崩溃。通过本文可以了解到具体的错误信息及解决方法。

今天给GridView设置数据时一直莫名报空指针,错误信息如下,后来网上搜索查下,才知道知己在adapter的getView()方法里返回的是null,真想给自己一个大嘴巴子,特此记录下这个失误。

 

11-26 16:48:33.209: E/AndroidRuntime(3169): FATAL EXCEPTION: main
11-26 16:48:33.209: E/AndroidRuntime(3169): java.lang.NullPointerException
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.AbsListView.obtainView(AbsListView.java:2269)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.GridView.onMeasure(GridView.java:1030)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.View.measure(View.java:15172)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.View.measure(View.java:15172)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.View.measure(View.java:15172)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.View.measure(View.java:15172)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.View.measure(View.java:15172)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.View.measure(View.java:15172)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.View.measure(View.java:15172)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:736)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.Choreographer.doCallbacks(Choreographer.java:566)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.Choreographer.doFrame(Choreographer.java:536)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:722)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.os.Handler.handleCallback(Handler.java:615)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.os.Handler.dispatchMessage(Handler.java:92)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.os.Looper.loop(Looper.java:137)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at android.app.ActivityThread.main(ActivityThread.java:4745)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at java.lang.reflect.Method.invokeNative(Native Method)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at java.lang.reflect.Method.invoke(Method.java:511)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-26 16:48:33.209: E/AndroidRuntime(3169):  at dalvik.system.NativeStart.main(Native Method)

FATAL EXCEPTION: main Process: com.example.kucun2, PID: 14960 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:454) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:416) at com.example.kucun2.ui.jinhuo.AddInventoryFragment$7.getView(AddInventoryFragment.java:224) at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:206) at android.widget.Spinner.onMeasure(Spinner.java:622) at androidx.appcompat.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:444) at android.view.View.measure(View.java:29007) at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1226) at android.widget.LinearLayout.onMeasure(LinearLayout.java:728) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1613) at android.widget.LinearLayout.measureVertical(LinearLayout.java:883) at android.widget.LinearLayout.onMeasure(LinearLayout.java:726) at android.view.View.measure(View.java:29007) at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1641) at android.widget.FrameLayout.onMeasure(FrameLayout.java:205) at android.widget.ScrollView.onMeasure(ScrollView.java:559) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at android.widget.FrameLayout.onMeasure(FrameLayout.java:205) at android.view.View.measure(View.java:29007) at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:811) at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measure(BasicMeasure.java:466) at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measureChildren(BasicMeasure.java:134) at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:278) at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:120) at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1594) at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1708) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:760) at com.google.android.material.appbar.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:100) at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:2381) at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:831) at android.view.View.measure(View.java:29007) at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:1156) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at android.widget.FrameLayout.onMeasure(FrameLayout.java:205) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1613) at android.widget.LinearLayout.measureVertical(LinearLayout.java:883) at android.widget.LinearLayout.onMeasure(LinearLayout.java:726) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at android.widget.FrameLayout.onMeasure(FrameLayout.java:205) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1613) 2025-06-07 20:25:16.069 14960-14960 AndroidRuntime com.example.kucun2 E at android.widget.LinearLayout.measureVertical(LinearLayout.java:883) at android.widget.LinearLayout.onMeasure(LinearLayout.java:726) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at com.android.internal.policy.DecorView.measureChildWithMargins(DecorView.java:3010) at android.widget.FrameLayout.onMeasure(FrameLayout.java:205) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:911) at android.view.View.measure(View.java:29007) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:5801) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:3999) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4393) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3667) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:12113) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2459) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468) at android.view.Choreographer.doCallbacks(Choreographer.java:1693) at android.view.Choreographer.doFrame(Choreographer.java:1448) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284) at android.os.Handler.handleCallback(Handler.java:1014) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loopOnce(Looper.java:250) at android.os.Looper.loop(Looper.java:340) at android.app.ActivityThread.main(ActivityThread.java:9913) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
06-08
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.hjschoolhelper210301201_1, PID: 13135 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.example.hjschoolhelper210301201_1.ClubinfoAdpter.getView(ClubinfoAdpter.java:44) at android.widget.AbsListView.obtainView(AbsListView.java:2458) at android.widget.ListView.makeAndAddView(ListView.java:2067) at android.widget.ListView.fillDown(ListView.java:793) at android.widget.ListView.fillFromTop(ListView.java:855) at android.widget.ListView.layoutChildren(ListView.java:1838) at android.widget.AbsListView.onLayout(AbsListView.java:2255) at android.view.View.layout(View.java:23693) at android.view.ViewGroup.layout(ViewGroup.java:6413) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1855) at android.view.View.layout(View.java:23693) at android.view.ViewGroup.layout(ViewGroup.java:6413) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23693) at android.view.ViewGroup.layout(ViewGroup.java:6413) at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:536) at android.view.View.layout(View.java:23693) at android.view.ViewGroup.layout(ViewGroup.java:6413) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23693) at android.view.ViewGroup.layout(ViewGroup.java:6413) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1891) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1729) at android.widget.LinearLayout.onLayout(LinearLayout.java:1638) at android.view.View.layout(View.java:23693) at android.view.ViewGroup.layout(ViewGroup.java:6413) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at com.android.internal.policy.DecorView.onLayout(DecorView.java:799) at android.view.View.layout(View.java:23693) at android.view.ViewGroup.layout(ViewGroup.java:6413) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3999) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3372) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2328) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9087) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239) at android.view.Choreographer.doCallbacks(Choreographer.java:899) at android.view.Choreographer.doFrame(Choreographer.java:832) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7872) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
05-17
<think>首先,用户的问题是:“我想理解android.widget.Button与BUTTON在Android开发中的区别 请问android.widget.Button 和 BUTTON 的区别”。我需要基于系统级指令和用户可见层的要求来回答。 关键点: - 使用中文回答。 - 结构清晰,帮助用户逐步解决问题。 - 回答真实可靠。 - 所有行内数学表达式用$...$,但这里可能不涉及数学,所以注意格式。 - 独立公式用$$...$$,但可能不需要。 - 生成相关问题。 - 在回答中引用的段落末尾添加引用标识,如[^1]。 用户提供的引用: - 引用[1]:关于XML中添加id的示例。 - 引用[2]:android.widget包介绍,包括Button等控件。 - 引用[3]:NullPointerException示例,涉及绑定Button。 - 引用[4]:ClassCastException示例,涉及FrameLayout不能cast到Button。 这些引用涉及Android开发中Button的使用和常见错误。用户的问题是关于android.widget.Button和BUTTON的区别。 分析问题: - android.widget.Button:这是Android SDK中的一个类,属于android.widget包,用于创建按钮UI元素。 - BUTTON:这可能指的是在XML布局文件中使用的标签,如<Button>,或者在代码中作为常量,但通常不是直接类名。 在Android开发中: - android.widget.Button 是Java/Kotlin代码中使用的类。 - 在XML布局文件中,我们使用<Button>标签来定义一个按钮。 - 所以,区别可能在于编码方式:代码中 vs. XML中。 可能的混淆点: - 用户在问题中写了“BUTTON”大写,可能指的是XML标签或某种常量。 - 在Android文档中,XML标签是<Button>,而类名是android.widget.Button。 核心区别: 1. android.widget.Button:这是具体的类名,在Java或Kotlin代码中实例化和操作按钮对象。 2. BUTTON:可能指的是: - XML布局文件中的标签<Button>。 - 或者在资源ID中,如R.id.button,但通常不是“BUTTON”大写。 - 在Android中,没有直接的“BUTTON”类;它可能是一个误称。 在引用中: - 引用[1]提到XML中添加id:<Button android:id="@+id/button1" />,这里标签是<Button>。 - 引用[3]提到绑定控件:takePhoto = (Button) photoView.findViewById(R.id.take_photo_btn);,这里使用Button类。 - 引用[4]提到ClassCastException:FrameLayout cannot be cast to android.widget.Button,强调类名。 所以,区别是: - android.widget.Button 是编程语言中的类。 - BUTTON(或<Button>)是XML声明中的元素标签。 回答结构: 1. 澄清术语:解释android.widget.Button和BUTTON在上下文中可能是什么。 2. 逐步解释区别: - 在XML布局中的使用。 - 在代码中的使用。 3. 提供示例代码或XML片段。 4. 引用相关引用以支持解释。 5. 确保回答真实可靠,基于Android开发知识。 6. 生成相关问题。 添加引用: - 在回答中,当提到XML或错误时,引用相关引用。 最终回答框架: - 引言:总结区别。 - 详细解释: - android.widget.Button:代码中的类。 - BUTTON:XML中的标签。 - 示例:展示如何在XML和代码中使用。 - 常见错误:如类型转换错误(引用[4])。 - 结论。 - 生成相关问题。 生成相关问题: - 基于主题,如Android UI开发。 - 例如: 1. 如何在Android中动态创建按钮? 2. 什么是findViewById方法的作用? 3. 如何避免ClassCastException在Android开发中?</think>### Android.widget.Button 与 BUTTON 的区别 在 Android 开发中,`android.widget.Button` 和 `BUTTON` 是两种不同的概念,主要区别体现在使用场景和语法形式上。下面我将逐步解释它们的区别,帮助您清晰理解。 #### 1. **android.widget.Button:代码中的具体类** - **定义**:`android.widget.Button` 是 Android SDK 中的一个 Java/Kotlin 类,属于 `android.widget` 包。它表示一个可交互的按钮 UI 组件,用于响应用户点击事件。 - **使用场景**: - 在 Java 或 Kotlin 代码中实例化按钮对象。 - 动态创建按钮、设置属性(如文本、点击监听器)或进行编程操作。 - **示例代码**: ```java // 在 Activity 中创建 Button 对象 Button myButton = findViewById(R.id.button1); // 通过资源 ID 绑定 myButton.setText("点击我"); // 设置按钮文本 myButton.setOnClickListener(v -> { // 处理点击事件 }); ``` - 这里,`Button` 是类名,必须通过完整包路径引用(如 `android.widget.Button`)。 - **关键点**:这是一个运行时对象,在代码中直接操作,用于实现业务逻辑。如果错误转换类型(如将非按钮视图强制转换为 `Button`),会导致 `ClassCastException`,例如 `FrameLayout cannot be cast to android.widget.Button`[^4]。 #### 2. **BUTTON:XML 布局中的声明标签** - **定义**:`BUTTON`(通常写作 `<Button>` 标签)是在 XML 布局文件中使用的元素,用于声明按钮的静态属性。它不是代码中的类,而是 Android 资源系统的组成部分。 - **使用场景**: - 在 `res/layout/` 目录下的 XML 文件中定义按钮的初始外观(如 ID、尺寸、文本)。 - 系统在编译时自动将 `<Button>` 标签转换为对应的 `Button` 对象。 - **示例 XML**: ```xml <!-- 在 activity_main.xml 中声明按钮 --> <Button android:id="@+id/button1" <!-- 必须定义 ID 以便代码绑定 --> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交" /> ``` - 这里,`<Button>` 是标签名,不区分大小写(但通常大写),用于描述 UI 结构。 - **关键点**:这是一个设计时声明,用于分离 UI 和逻辑。如果未正确定义 ID(如缺少 `android:id="@+id/button1"`),在代码中绑定时会引发 `NullPointerException`,例如 `Attempt to invoke virtual method ‘void android.widget.Button...`[^3]。 #### 3. **核心区别总结** | 方面 | android.widget.Button | BUTTON (或 <Button> 标签) | |--------------------|-------------------------------------------|-----------------------------------| | **本质** | 代码中的类 (Java/Kotlin 对象) | XML 中的声明标签 | | **使用位置** | Java/Kotlin 源代码文件 | XML 布局文件 (如 activity_main.xml) | | **作用** | 运行时操作按钮行为 (事件处理、属性修改) | 设计时定义按钮初始属性 (ID、文本等) | | **错误示例** | 类型转换错误 (ClassCastException)[^4] | ID 未定义导致绑定失败 (NullPointerException)[^3] | | **依赖关系** | 依赖 XML 中定义的 ID 进行 `findViewById` | 依赖代码中类实例化 | #### 4. **为什么容易混淆?** - 在 Android 开发中,两者紧密关联: - XML 中的 `<Button>` 标签在编译后,会被系统映射到 `android.widget.Button` 类。 - 例如,当您在 XML 中添加 `<Button android:id="@+id/button1">` 时,在代码中通过 `findViewById(R.id.button1)` 获取的就是 `Button` 对象[^1]。 - 混淆通常源于术语:开发者可能口语化称“BUTTON”指代 XML 标签,而“Button”指代代码类。 #### 5. **最佳实践** - **始终在 XML 中定义 ID**:确保每个 `<Button>` 有唯一 ID(如 `android:id="@+id/my_button"`),避免运行时错误[^1]。 - **正确类型转换**:在代码中使用 `findViewById` 时,显式转换为 `Button` 类,例如: ```java Button btn = (Button) findViewById(R.id.my_button); // 正确转换 ``` - **利用 android.widget 包**:该包提供标准化 UI 控件(如 `Button`、`TextView`),确保跨设备兼容性[^2]。 通过以上解释,您应该能清晰区分两者:`android.widget.Button` 是面向代码的类,而 `BUTTON` 是面向 XML 的声明标签。它们在 Android 开发中互补,共同构建用户界面。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值