2016-01-28 1 views
0

Моя программа открывается с помощью страницы входа, а затем переходит на страницу с двумя кнопками (перейдите к счетчику и перейдите к сканированию штрих-кода).Попытка ссылаться на виртуальный метод ... на ошибку ссылки на нулевой объект?

Очень простой на данный момент, но я застреваю, потому что я нажимаю кнопку сканирования штрих-кода, и он отлично перемещается на новую страницу, но если я нажму кнопку «идти на счетчик» (которая идет на класс хронометра) , программа выйдет из строя - даже если для нее создан класс.

Это дает мне эту ошибку:

Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference.

Вот мой код

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

public class page1 extends AppCompatActivity implements View.OnClickListener { 

Button scanner,go2count; 

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

    scanner = (Button) findViewById(R.id.scanner); 
    go2count = (Button) findViewById(R.id.go2count); 

    scanner.setOnClickListener(this); 
    go2count.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    switch(v.getId()){ 
     case R.id.scanner: 
      startActivity(new Intent(this, ScanPage.class)); 
      break; 

     case R.id.go2count: 
      startActivity(new Intent(this, ChronoPage.class)); 
      break; 
    } 
} 

Так, если нажать на кнопку 'сканер', он отлично работает. Но если я нажму кнопку «go2count», программа сообщит мне об ошибке.

Это код хронометр:

import android.os.Bundle; 
import android.os.SystemClock; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Chronometer; 
import android.widget.Button; 

public class ChronoPage extends AppCompatActivity implements View.OnClickListener { 

private Button start; 
private Button stop; 
private Button resume; 
private Button reset; 
private long time = 0; 

private Chronometer myChrono; 

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

public void uI(){ 
    start = (Button) findViewById(R.id.bStart); 
    start.setOnClickListener(this); 

    stop = (Button) findViewById(R.id.bStop); 
    stop.setOnClickListener(this); 

    resume = (Button) findViewById((R.id.bResume)); 
    resume.setOnClickListener(this); 

    reset = (Button) findViewById(R.id.bReset); 
    reset.setOnClickListener(this); 

    myChrono = (Chronometer) findViewById(R.id.chronometer); 
} 

@Override 
public void onClick(View v){ 
    if (v == start){ 
     myChrono.setBase(SystemClock.elapsedRealtime()); 
     myChrono.start(); 
    } 
    else if (v == stop){ 
     time = SystemClock.elapsedRealtime(); 
     myChrono.stop(); 
     // printing(); 
    } 
    else if (v == resume){ 
     myChrono.setBase(myChrono.getBase() + SystemClock.elapsedRealtime() - time); 
     myChrono.start(); 
    } 
    else if (v == reset){ 
     myChrono.setBase(SystemClock.elapsedRealtime()); 
    } 
} 

}

Другой пост сказал попробовать убрав «Использовать хост-GPU» в менеджере AVD, но это не решило проблему либо. Другие сообщения имеют одинаковую ошибку, но более специфичны для их кода. Вся помощь приветствуется!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    android:padding="10dp" 
    android:layout_width="match_parent"> 

<ImageView 
    android:id="@+id/logo1" 
    android:layout_marginTop="100dp" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:layout_gravity="center_horizontal" 
    android:src="@drawable/swordlogocopy"/> 

<Button 
    android:id="@+id/scanner" 
    android:text="Scan Barcode" 
    android:textColor="#DDC004" 
    android:background="#000000" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal"/> 

<Button 
    android:id="@+id/go2count" 
    android:text="Go to counter" 
    android:textColor="#DDC004" 
    android:background="#000000" 
    android:layout_width="100dp" 
    android:layout_gravity="center_horizontal" 
    android:layout_marginTop="30dp" 
    android:layout_height="wrap_content" /> 

И XML макет Chrono Страница:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    android:padding="10dp" 
    android:layout_width="match_parent"> 

<ImageView 
    android:id="@+id/logo1" 
    android:layout_marginTop="100dp" 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:layout_gravity="center_horizontal" 
    android:src="@drawable/swordlogocopy"/> 

<Chronometer 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:textColor="#000000" 
    android:id="@+id/chronometer1" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/start" 
    android:layout_gravity="center_horizontal" 
    android:id="@+id/bStart" 
    android:textColor="#DDC004" 
    android:background="#000000" 
    android:layout_marginTop="50dp"/> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/stop" 
    android:layout_gravity="center_horizontal" 
    android:textColor="#DDC004" 
    android:background="#000000" 
    android:layout_marginTop="5dp" 
    android:id="@+id/bStop" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/resume" 
    android:layout_gravity="center_horizontal" 
    android:textColor="#DDC004" 
    android:background="#000000" 
    android:layout_marginTop="5dp" 
    android:id="@+id/bResume" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/reset" 
    android:layout_gravity="center_horizontal" 
    android:textColor="#DDC004" 
    android:background="#000000" 
    android:layout_marginTop="5dp" 
    android:id="@+id/bReset" /> 

+0

Трудно сказать, какой из кнопок нуля без линии от LogCat или макетов XML. Но, как указывает ниже ответ. 'findViewById' возвращает' null', если он не может найти id –

+0

Опубликуйте свой стек лет! – TheSunny

ответ

0

Если вы получаете эту ошибку, то, скорее всего findViewById (идентификатор) не найти свою кнопку переменной в вашем xml, чтобы установить соответствующую кнопку и, следовательно, вернуть значение null. Какие результаты в NullPointerException при попытке установить OnClickListener с этой точкой зрения

Проверьте, если все кнопки Идентификаторы действительны