Android 从编辑文本计算平均值

Android 从编辑文本计算平均值,android,android-listview,android-edittext,textview,Android,Android Listview,Android Edittext,Textview,在“我的活动”中,有两个按钮:一个用于将项目添加到ListView,它由EditText(用户在其中输入十进制数)组成,另一个用于启动计算。目标是根据添加到ListView的项目数,计算在EditText中输入的数字的平均值 以下是活动的代码: public class PersActivity extends Activity { Button start, calcaverage1; ListView MarkListView; TextView markresult; private S

在“我的活动”中,有两个按钮:一个用于将项目添加到ListView,它由EditText(用户在其中输入十进制数)组成,另一个用于启动计算。目标是根据添加到ListView的项目数,计算在EditText中输入的数字的平均值

以下是活动的代码:

public class PersActivity extends Activity {

Button start, calcaverage1;
ListView MarkListView;
TextView markresult;
private SubjectAdapter adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.subject_list_view);

    setupListViewAdapter();

    setupAddMarkButton();

    // Start button
            start = (Button)findViewById(R.id.start1);
            start.setOnClickListener(new OnClickListener() 
            {   public void onClick(View v) 
                {   
                    Intent intent = new Intent(PersActivity.this, MainActivity.class);
                        startActivity(intent);      
                        finish();
                }
            });

    // Calc average button
            calcaverage1 = (Button) findViewById(R.id.calcaverage);
            calcaverage1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    addNumberFromText();                        
                }
            });
}

public void removeClick(View v) {
    Mark itemToRemove = (Mark)v.getTag();
    adapter.remove(itemToRemove);
}

private void setupListViewAdapter() {
    adapter = new SubjectAdapter(PersActivity.this, R.layout.subject_list_item, new ArrayList<Mark>());
    MarkListView = (ListView)findViewById(R.id.subject_list_item);
    MarkListView.setAdapter(adapter);
}

private void setupAddMarkButton() {
    findViewById(R.id.addsubject).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            adapter.insert(new Mark("", 0), 0);
        }
    });
}
void addNumberFromText()
{
    double total=0;
    for(int i=0;i<MarkListView.getChildCount();i++)
    {
        View wantedView = MarkListView.getChildAt(i);
        markresult = (TextView)wantedView.findViewById(R.id.subjectmark);
        double value=Double.parseDouble(markresult.toString());
        total+=value;
    }
    Log.d("PersActivity","total sum is "+total);
}

}

希望有解决办法!非常感谢你

从您的代码片段来看,您似乎忘记初始化
CalAverage1
按钮。这就是为什么当您试图调用setOnClickListener时会出现
NullPointerException
。只需声明并初始化
CalAverage1
按钮

Button calcaverage1= (Button)findViewById(R.id.calc);
calcaverage1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
         addNumberFromText();                        
    }
});
编辑: 对于第二个
NullPointerException

您已经创建了一个成员变量
ListView MarkListView。但是,您没有初始化它。相反,您创建了一个同名的局部变量
ListView MarkListView=(ListView)findViewById(R.id.subject\u list\u项)。
这是一个完全不同的变量

将该行替换为:

ListView MarkListView = (ListView)findViewById(R.id.subject_list_item);
这一行:


MarkListView=(ListView)findViewById(R.id.subject\u list\u项)

根据logCat堆栈跟踪,您将获得一个数字格式异常。更改行:

double value=Double.parseDouble(markresult.toString());
致:


如果活动在启动时停止,则必须有堆栈跟踪。在Eclipse中,检查LogCat视图并在这里发布堆栈跟踪。为什么不能?我是说,有什么问题吗?只需阅读输入并使用公式计算平均值。你能确切地解释一下你的问题吗?是的,对不起。我的问题是,当我按下“calculateaverage”按钮时,我的应用程序停止。我现在编辑并添加LogCat您已经创建了一个成员变量
ListView MarkListView。但是,您没有初始化它。相反,您创建了一个名称相同的变量
ListView MarkListView=(ListView)findViewById(R.id.subject\u list\u item)
setupListViewAdapter
方法中。这是一个完全不同的变量。将此行编辑为:
MarkListView=(ListView)findViewById(R.id.subject\u list\u项)你是对的,但现在我按下按钮时再次出错。我更新LogCat errorUse这一行
double value=double.parseDouble(markresult.getText())
addNumberFromText()
方法中。向parseDouble()方法传递的参数不正确
ListView MarkListView = (ListView)findViewById(R.id.subject_list_item);
double value=Double.parseDouble(markresult.toString());
double value=Double.parseDouble(markresult.getText());