1

私はアンドロイドを学んでいるので、電話の呼び出し音モードを切り替えるためだけにこのコードを書きました。コードは問題なくコンパイルされます。Androidマニフェストにエントリを作成し、コンテンツビューを必要なレイアウトに設定しましたが、このアプリを実行すると、強制終了エラーが発生します。誰かがForceCloseエラーが発生する理由を教えてもらえるので、将来は自分で問題を理解する必要があります。コードは次のとおりです。

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

どうもありがとう

4

1 に答える 1

2

何が起こるかを確認するには、logcatを確認する必要があります。Logcat|を参照してください。Android開発者

問題を示しているクラッシュのスタックトレースを見つけます。自分で理解できない場合は、質問のlogcatをコピーして貼り付けてください。

この場合、tb初期化する前に参照しています。

tb.setOnClickListener(this);

この時点で、tbはまだnullなので、NullPointerExceptionが発生します。これを解決するには、次のようにコードを変更します。

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

また、メソッドと変数の命名に関するJavaの規則を使用することをお勧めします。

  • クラスは大文字で始まります:例:MyClass
  • 変数は小文字で始まります:例:myVariable
  • メソッドは小文字で始まります:例:myMethod()

これにより、後で混乱するのを防ぐことができます。

于 2012-08-07T20:33:55.550 に答える