2016-01-28 1 views
0

Mon programme s'ouvre avec une page de connexion, puis se déplace vers une page avec deux boutons (aller au compteur et aller à scanner le code à barres). Très basique à ce stade, mais je suis coincé parce que j'appuie sur le bouton du code-barres de balayage et il se déplace vers la nouvelle page bien, mais si j'appuie sur le bouton 'aller au compteur' (qui va à une classe de chronomètre) , le programme se bloque - même s'il y a une classe faite pour ça.Vous essayez d'appeler la méthode virtuelle ... sur une erreur de référence d'objet null?

Il me donne cette erreur:

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

Voici mon code

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; 
    } 
} 

Donc, si j'appuie sur le bouton 'scanner', il fonctionne très bien. Mais si j'appuie sur le bouton 'go2count', le programme me donne l'erreur mentionnée.

Ce code chronométrique:

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()); 
    } 
} 

}

Un autre message dit d'essayer décochant la case « Utiliser le GPU Host » dans le gestionnaire AVD, mais cela ne résout pas le problème non plus. Les autres articles ont la même erreur, mais sont plus spécifiques à leur code. Toute aide est appréciée!

<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" /> 

Et la mise en page XML du Chrono Page:

<?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

Il est difficile de dire lequel de vos boutons est nulle sans la ligne de la logcat ou vos mises en page XML. Mais comme le montre la réponse ci-dessous. 'findViewById' renvoie' null' s'il est impossible de trouver l'ID –

+0

Publiez votre pile yo! – TheSunny

Répondre

0

Si vous obtenez cette erreur, alors très probablement l'findViewById (id) ne trouve pas votre bouton variable dans votre fichier XML pour définir le bouton correspondant et donc retourner null. Ce qui se traduit par un NullPointerException lorsque vous essayez de définir une OnClickListener sur ce point de vue

Vérifiez si tous les Ids des boutons sont valables