2012-08-07 3 views
1

Je suis en train d'apprendre Android, j'ai donc écrit ce code juste pour basculer le mode de sonnerie du téléphone. Le code compile sans problème, j'ai fait une entrée dans Android Manifest, définir la vue du contenu à la mise en page requise, mais je cours cette application, je reçois une erreur de fermeture de force. Quelqu'un peut-il me dire pourquoi les erreurs se produisent Fermer la Force afin qu'à l'avenir, je devrais être de comprendre le problème myself.Here est le code:Erreur FORCE CLOSE dans l'émulateur Android

package com.umer.practice2; 

import android.R.bool; 
import android.app.Activity; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.ToggleButton; 

public class RingerMode extends Activity implements View.OnClickListener { 

ToggleButton tb; 
ImageView Riv; 
TextView tv; 
AudioManager mRing; 
boolean silent; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ringermode); 

    tb.setOnClickListener(this); 
    InitializeShit(); 

    mRing=(AudioManager) getSystemService(AUDIO_SERVICE); 
} 

private void InitializeShit() { 
    // TODO Auto-generated method stub 
    tb= (ToggleButton) findViewById(R.id.ringTB); 
    tv= (TextView) findViewById(R.id.ringTV); 
    Riv= (ImageView) findViewById(R.id.ringIV); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    checkMode(); 
    if(silent) 
    { 
     Riv.setImageResource(R.drawable.mysplash); 
    }else 
     { 
      Riv.setImageResource(R.drawable.myscreen); 
     } 
} 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    checkMode(); 
} 

private void checkMode() { 
    // TODO Auto-generated method stub 
    int temp = mRing.getRingerMode(); 
    if(temp==AudioManager.RINGER_MODE_SILENT) 
    { 
     tv.setText("Silent"); 
     Riv.setImageResource(R.drawable.mysplash); 
     silent= true; 
    }else 
     if(temp==AudioManager.RINGER_MODE_NORMAL) 
     { 
      tv.setText("Normal"); 
      Riv.setImageResource(R.drawable.myscreen); 
      silent= false; 
     } 
    } 

Merci beaucoup

Répondre

2

Vous devez jeter un oeil à la logcat pour voir ce qui se passe. Voir Logcat | Android Developers.

Trouvez la trace de pile du plantage, qui pointe vers votre problème. Si vous ne pouvez pas le comprendre vous-même, copiez/collez le logcat dans votre question.

Dans ce cas précis, vous faites référence tb avant de l'initialiser:

tb.setOnClickListener(this); 

À ce stade, tb est encore null, donc un NullPointerException se produit. Pour résoudre ce problème, changer votre code comme ceci:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ringermode); 


    InitializeShit(); 
    tb.setOnClickListener(this); 

    mRing=(AudioManager) getSystemService(AUDIO_SERVICE); 
} 

Aussi, je recommande d'utiliser les conventions de Java en ce qui concerne les méthodes et désignation des variables:

  • Les cours commencent par un capital: par exemple MyClass
  • Les variables commencent par une minuscule: par ex. myVariable
  • Les méthodes commencent par une minuscule: par ex. myMethod()

Cela vous évitera la confusion par la suite.