将数字传递给EditText?

时间:2016-02-18 04:54:57

标签: java android android-edittext

我正在开发一款应用程序来为我计算力量。它工作正常,直到我尝试将最终的数字值传递给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);
    }
}

1 个答案:

答案 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方法。叹息。