Android 从编辑文本计算平均值
在“我的活动”中,有两个按钮:一个用于将项目添加到ListView,它由EditText(用户在其中输入十进制数)组成,另一个用于启动计算。目标是根据添加到ListView的项目数,计算在EditText中输入的数字的平均值 以下是活动的代码: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
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());