我正在开发一款应用程序来为我计算力量。它工作正常,直到我尝试将最终的数字值传递给TextView。这是代码(calc_Click是单击按钮时调用的内容):
package com.hoodeddeath.physicscalculator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class GravityActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gravity);
}
public void calc_Click(View v){
double TEN = 10;
double NEGELEVEN = -11;
double G = 6.67*(Math.pow(TEN,NEGELEVEN));
double TWO = 2;
String mOneText = ((EditText)findViewById(R.id.massOne)).getText().toString();
String aOneText = ((EditText)findViewById(R.id.ampOne)).getText().toString();
String mTwoText = ((EditText)findViewById(R.id.massTwo)).getText().toString();
String aTwoText = ((EditText)findViewById(R.id.ampTwo)).getText().toString();
String distText = ((EditText)findViewById(R.id.distance)).getText().toString();
String aThreeText = ((EditText)findViewById(R.id.ampThree)).getText().toString();
double mOne = Double.parseDouble(mOneText);
double aOne = Double.parseDouble(aOneText);
double mTwo = Double.parseDouble(mTwoText);
double aTwo = Double.parseDouble(aTwoText);
double dist = Double.parseDouble(distText);
double aThree = Double.parseDouble(aThreeText);
mOne = mOne * aOne;
mTwo = mTwo * aTwo;
dist = dist * aThree;
dist = Math.pow(dist, TWO);
double total = (G * mOne * mTwo) / dist;
TextView a = (TextView)findViewById(R.id.finalForceLabel);
a.setText((int) total);
}
}
答案 0 :(得分:1)
这段代码:
double mOne = Double.parseDouble(findViewById(R.id.finalForceLabel).toString());
double aOne = Double.parseDouble(findViewById(R.id.ampOne).toString());
double mTwo = Double.parseDouble(findViewById(R.id.massTwo).toString());
double aTwo = Double.parseDouble(findViewById(R.id.ampTwo).toString());
double dist = Double.parseDouble(findViewById(R.id.distance).toString());
double aThree = Double.parseDouble(findViewById(R.id.ampThree).toString());
不正确。如果要获取编辑文本的文本,请写下:
String someString = ((EditText)findViewById(R.id.ampOne)).getText().toString();
然后解析它
double d = Double.parseDouble(someString);
为什么代码错误:
您的代码调用方法findViewById
,该方法返回View
个对象,而不是EditText
。如果您在toString
上致电View
,它将返回View
的内存地址,而不是视图的文本。
评论中的这个问题:
你能告诉我为什么" TextView a =(TextView)findViewById(R.id.finalForceLabel); a.setText((int)total);"不会将最终的数字传递给TextView吗?
这是因为setText(int)
方法接受资源ID整数。那么什么是资源ID整数?在android中,您可能知道我们可以在不同的strings.xml
文件中存储不同的字符串本地化。并且您可以使用Resources.getString(int)
方法获取Android设备语言中的字符串。你通常会写:
Resources r = this.getResources();
r.getString(R.strings.someTextOrWhatever);
R.strings.someTextOrWhatever
是整数。 setText
方法具有占用资源ID的重载。 (您正在使用的那个)如果您将1
传递给方法,则不会将文本设置为1
,而是会查找与之对应的资源身份1
。但是,没有与1
对应的资源!这就是抛出异常的原因。
你应该做的是传递字符串而不是整数。
a.setText(Double.toString(total));
这只是另一个令人烦恼的Android方法。叹息。