1

私は問題があります。エントリがある場合、統計アクティビティは正しく機能します。ただし、エントリがない場合、stastアクティビティはクラッシュします。私を助けてください。それを防ぐために何かが必要です。(私はプログラマーではないので、私にとっては簡単ではありません)

package com.sudarmuthu.android.wt.activities;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.sudarmuthu.android.wt.R;
import com.sudarmuthu.android.wt.data.DBUtil;
import com.sudarmuthu.android.wt.data.Entry;

/**
 * Activity class to handle stats
 * 

public class EntriesStatsActivity extends Activity {


// for debugging
private static boolean D = true;
private static String TAG = "WT - EntriesStatsActivity";

private List<Entry> mEntries;

/* (non-Javadoc)
 * @see android.app.Activity#onCreate(android.os.Bundle)
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entry_stats);

    Bundle bundle = getIntent().getExtras();
    int typeId = bundle.getInt("typeId");

    if (D) Log.d(TAG, "Got type id: " + typeId);

    mEntries = DBUtil.fetchEntries(this, typeId, null);
    Entry firstEntry = mEntries.get(0);

    int count = mEntries.size();
    float sum = 0;
    float average = 0;

    float min = Float.parseFloat(firstEntry.getValue());
    float max = Float.parseFloat(firstEntry.getValue());

    // calculate
    for (Entry entry : mEntries) {
        float value = Float.parseFloat(entry.getValue());
        sum += value;

        if (value < min) {
            min = value;
        }

        if (value > max) {
            max = value;
        }
    }

    average = sum / count;

    // populate the values
    TextView statsCount = (TextView) findViewById(R.id.statsCount);
    statsCount.setText("" + count);

    TextView statsSum = (TextView) findViewById(R.id.statsSum);
    statsSum.setText("" + sum);

    TextView statsAverage = (TextView) findViewById(R.id.statsAverage);
    statsAverage.setText("" + average);

    TextView valueFrom = (TextView) findViewById(R.id.valueFrom);
    valueFrom.setText("" + min);

    TextView valueTo = (TextView) findViewById(R.id.valueTo);
    valueTo.setText("" + max);

}

}

4

2 に答える 2

0

エントリがない場合、mEntries.size()は0になります。

average = sum / count;

0で除算すると、がスローされますArithmetic Exception(数値を0で除算することはできません)。

于 2012-12-15T10:31:37.120 に答える
0

nullポインタ例外が発生する可能性があります:

mEntries = DBUtil.fetchEntries(this, typeId, null);
if( mEntries == null ) {
   return;
}
于 2012-12-15T11:44:41.297 に答える