尝试在空对象引用上调用虚方法' void android.widget.Button.setOnClickListener,即使我定义了所有按钮

时间:2017-02-16 17:05:05

标签: android nullpointerexception

package cppandi.apjquotes;

import android.content.Intent;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;

public class MainActivity extends AppCompatActivity {
Button btn1;
Button btn2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.front);
btn1 = (Button) this.findViewById(R.id.quotes);
btn2 = (Button) this.findViewById(R.id.about);
new CountDownTimer(5000, 1000) {

@Override
public void onTick(long millisUntilFinished) {
}

@Override
public void onFinish() {
//set the new Content of your activity
setContentView(R.layout.activity_main);
}
}.start();
btn1.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) {
// Perform action on click
Intent i = new Intent(v.getContext(), quotes.class);
startActivity(i);
}
});
btn2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
Intent i = new Intent(v.getContext(), about.class);
startActivity(i);
}
});
}}





<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cppandi.apjquotes.MainActivity">

<Button
android:text="@string/quotes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="126dp"
android:id="@+id/quotes"
android:onClick="btnClickAct1"/>
<Button
android:text="@string/about"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/quotes"
android:layout_alignLeft="@+id/quotes"
android:layout_alignStart="@+id/quotes"
android:layout_marginTop="94dp"
android:id="@+id/about"
android:layout_alignRight="@+id/quotes"
android:layout_alignEnd="@+id/quotes"
android:onClick="btnClickAct2"/>
</RelativeLayout>

这里我得到的错误是&#34;尝试调用虚方法&#39; void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)&#39;在null对象引用&#34;即使我已经取消了所有的按钮。

1 个答案:

答案 0 :(得分:0)

您的按钮位于layout_main。

您将在5秒后设置主布局。在这一点上,这一点只会夸大和设置布局。

如果您尝试在该点之前引用视图,则视图将返回null。只有在计时器结束后才能分配您的按钮和监听器。在此之前,即使您使用findViewById,由于布局没有膨胀,因此视图将被指定为null。

首先使用计时器更改这样的布局可能不是一个好主意。我认为你正在寻找一个闪屏而不是当前的方法。谷歌启动画面显示应用尚未加载的时间。