0

これは、もう 1 つの機能を追加するまで完全に機能するクラスです。コードはコンパイルされ、実行するとすぐにクラッシュします。
問題はcomponentAnalyzer、このクラスに実装したいクラスにあります。componentAnalyzerこれをまったく同じ方法で別のクラスに実装し、美しく機能するため、なぜ機能しないのかわかりません。

小さな間違いだと思いますが、不明です。残りの部分は機能し、触れてはならないため、問題を引き起こしている部分をコメントアウトしました。

を使用するメソッドcomponentAnalyzerはコードの最後にあります。見やすくするために、機能していたものをすべて切り取りました。

public class PowerMonitorActivity extends Activity implements SeekBar.OnSeekBarChangeListener {
    private static boolean instantiated = false;

    //private static ComponentAnalyzer componentAnalyzer;
    //private Context context;

    private Button changeGPSButton;
    private Button changeAudioButton;       
    private Button locationUpdateButton;        
    private SeekBar brightnessSeekBar;
    private int screenBrightness = 123;         
    private Handler cpuHandler = new Handler();
    private CPUMonitor cpuMonitor = new CPUMonitor();
    private int updateTime = 1000;

    private Handler totalPowerHandler = new Handler ();         
    private MediaManager mediaManager = new MediaManager();
    private boolean requestingLocation = false;

    private boolean wifiIsTransmitting = false;
    private boolean wifiIsConnected = false;
    private boolean cellIsTransmitting = false;
    private boolean cellIsConnected = false;
    private boolean isLogging = false;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //Bundle extras = getIntent().getExtras();
        if (!instantiated) {
            instantiated = true;
                 //componentAnalyzer = new ComponentAnalyzer(context, extras);
        }

        // Create GPS button - note that location settings cannot be changed directly
        // in a program. Rather, a settings screen is shown when this button is pressed.
        changeGPSButton = (Button)findViewById(R.id.changeGPS);
        changeGPSButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                showGPSOptions();
            }
        });

        totalPowerHandler.removeCallbacks(updatePower);
        totalPowerHandler.postDelayed(updatePower, 1000);  
    }

    private Runnable updateCpu = new Runnable() {
        public void run() {
            float util = cpuMonitor.getUtil();
            int rutil = Math.round(100*util);

            TextView cpuTextView = (TextView)findViewById(R.id.cpuTextView);
            cpuTextView.setText(rutil+"%");      
            cpuHandler.postDelayed(this, updateTime);
            }   
    };


    private Runnable updatePower = new Runnable() 
    {
        public void run()
        {
            //float testPower = componentAnalyzer.getWifiPower();; 

            TextView totalPowerView = (TextView)findViewById(R.id.totalPowerTextView);
            //totalPowerView.setText(testPower+"mW");

            totalPowerHandler.postDelayed(this, 1000);
        }
    };        
4

2 に答える 2

1

初期化しましたcontextか?現在のコード例contextnullComponentAnalyzerがインスタンス化されたときです。

于 2012-06-19T09:50:55.320 に答える
0

私の観点では、あなたのアプリケーションコンテキストはnullです(現在のアクティビティまたはアプリケーションのコンテキストへの参照を割り当てるのを忘れていました)

問題のある行のコメントを削除し、

これらの行を見てください。

Bundle extras = getIntent().getExtras();
        if (!instantiated) {
            instantiated = true;
                 componentAnalyzer = new ComponentAnalyzer(context, extras); // Here context is null
        }

以下に従ってこれを変更し、

Bundle extras = getIntent().getExtras();
        if (!instantiated) {
            instantiated = true;
            if(extras != null)
            componentAnalyzer = new ComponentAnalyzer(PowerMonitorActivity.this, extras);
            else Log.e("PowerMonitorActivity","Bundle extras is null");
        }
于 2012-06-19T09:51:15.277 に答える