【问题标题】:The following class could not be instantiated - Rendering problems message appears when using a custom class that extends Button无法实例化以下类 - 使用扩展 Button 的自定义类时出现渲染问题消息
【发布时间】:2016-08-27 15:43:27
【问题描述】:

我是 Android 开发新手,遇到了一个渲染问题,我在 XML 选项卡(显示布局的位置)上遇到了问题。错误消息说

The following classes could not be instantiated:
    - com.project.simon.project.Segment
java.lang.NullPointerException
    at com.project.simon.project.Segment.<init>(Segment.java:22)

它与我创建的自定义类 Segment 有关,以扩展 Button 并添加我自己的方法和变量。 当我运行它并吐出相同的错误消息时,该应用程序也会崩溃。我尝试清理项目、更新 android studio、重建、使缓存无效/重新启动,但问题仍然存在。

我正在使用 Android Studio 2.1,在我的应用程序的第二个活动中,我从一个实现 Button 的单独文件(与活动在同一个项目中)中定义的类 Segment 实例化一个对象。

Activity中的Segment对象初始化:

package com.project.simon.project;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.os.CountDownTimer;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.Button;


import java.io.IOException;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Semaphore;

public class GameActivity extends Activity {

    static Integer numSeg = 0;
    Integer selectedPart;
    Segment songSegment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);

        songSegment = (Segment) findViewById(R.id.segment1);
        ...
    }

Segment 对象 ID 的 XML:

<com.project.simon.project.Segment
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="0dp"
                android:layout_weight="30"
                android:layout_height="120dp"
                android:id="@+id/segment1"
                android:layout_column="0"
                android:background="@drawable/petolinie_part"
                android:clickable="true"
                android:layout_gravity="center_vertical"
                android:baselineAlignBottom="false"
                android:cropToPadding="false"
                android:adjustViewBounds="false"
                android:text="1"
                android:textSize="30dp"
                android:textColor="@android:color/black" />

该类具有来自 Button 类的三个构造函数。 numSeg 是我实例化 Segment 对象的活动中的静态成员变量(在 onCreate 之外)。

package com.project.simon.project;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;

/**
 * Created by simon on 28.4.2016.
 */
public class Segment extends Button{
    boolean emptiness = false;
    Integer part;
    public Segment(Context context) {
        super(context);
        part = GameActivity.numSeg;
        (GameActivity.numSeg)++;
    }
    public Segment(Context context, AttributeSet attrs){
        super(context, attrs);
        part = GameActivity.numSeg;
        (GameActivity.numSeg)++; //Segment.java:22
    }
    public Segment(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        part = GameActivity.numSeg;
        (GameActivity.numSeg)++;
    }

    Integer whichPart(){
        return part;
    }

    void setPart(int part){
        this.part = part;
    }
    boolean isEmpty(){
        return emptiness;
    }
    void setEmpty(Boolean emptiness){
        this.emptiness = emptiness;
    }

}

我得到的渲染问题堆栈是一个错误:

 Rendering Problems The following classes could not be instantiated:
- com.project.simon.project.Segment

java.lang.NullPointerException
    at com.project.simon.project.Segment.<init>(Segment.java:22)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:465)
    at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:172)
    at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105)
    at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:176)
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:247)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:171)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:835)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:229)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:426)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:520)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:508)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:967)
    at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:508)
    at com.android.tools.idea.rendering.RenderTask.access$600(RenderTask.java:75)
    at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:620)
    at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:617)
    at com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:371)
    at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:617)
    at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:639)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:654)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1700(AndroidLayoutPreviewToolWindowManager.java:82)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7$1.run(AndroidLayoutPreviewToolWindowManager.java:596)
    at com.intellij.openapi.progress.impl.CoreProgressManager$2.run(CoreProgressManager.java:142)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:127)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7.run(AndroidLayoutPreviewToolWindowManager.java:591)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:337)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:327)
    at com.intellij.util.ui.update.MergingUpdateQueue$3.run(MergingUpdateQueue.java:271)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:286)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:244)
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:234)
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
    at com.intellij.util.Alarm$Request$1.run(Alarm.java:352)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

    标签: android button nullpointerexception rendering extends


    【解决方案1】:

    尝试在GameActivity 中初始化numSeg。 类似于public static int numSeg = 0;

    注意:numSeg 必须是 static

    【讨论】:

    • 它已经在那里初始化了。我尝试添加公共访问修饰符,但没有任何变化。
    • @Aye 是static
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    相关资源
    最近更新 更多