【问题标题】:Some of my code is not executing in android studios? [duplicate]我的一些代码没有在 android studio 中执行? [复制]
【发布时间】:2016-10-05 14:11:46
【问题描述】:

在下面用于android studios中的android应用程序中,当调用第二个类(Main2Activity)的getPercent()时,它总是返回999(默认值),

ttper = .....;

onClick() 中主类的语句永远不会执行。这有什么具体原因吗?请各位大神指点一下!

这是主要活动,

public class MainActivity extends AppCompatActivity {

float i1m,i2m,mm,atp,assp;
float ttper=999;
boolean b=false;
EditText i1,i2,model,assignment,attendence;
Button b1;

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

    final Context cont = this;
    final Intent intent = new Intent(cont, Main2Activity.class);

    b1=(Button)findViewById(R.id.button2);
    b1.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            //try {
            i1=(EditText)findViewById(R.id.int1);
            i2=(EditText)findViewById(R.id.int2);
            model=(EditText)findViewById(R.id.mod);
            assignment=(EditText)findViewById(R.id.assign);
            attendence=(EditText)findViewById(R.id.attend);

            i1m = Float.parseFloat(String.valueOf(i1.getText()));
            i2m = Float.parseFloat(i2.getText().toString());
            mm = Float.parseFloat(model.getText().toString());
            assp = Float.parseFloat(assignment.getText().toString());
            atp = Float.parseFloat(attendence.getText().toString());
            ttper = ((i1m / 10) + (i2m / 10) + ((mm / 100) * 15) + (assp) + ((atp >= 75.0f) ? ((atp - 75) / 5) : 0.0f));

            //setValues();
            startActivity(intent);
            //}
            //catch (Exception e) {
              //  Log.e("app crash",e.getMessage());
            //}
        }
    });
}
/*void setValues()
{
   /* i1m = Float.parseFloat(String.valueOf(i1.getText()));
    i2m = Float.parseFloat(i2.getText().toString());
    mm = Float.parseFloat(model.getText().toString());
    assp = Float.parseFloat(assignment.getText().toString());
    atp = Float.parseFloat(attendence.getText().toString());*/
}/*
float getPercent()
{
        //float ttper=50.0f;
        return ttper;
}
}

这是第二个活动,

public class Main2Activity extends AppCompatActivity {

float tper=1.0f;
String str;
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        TextView v1 = (TextView) findViewById(R.id.textView11);
        MainActivity m1 = new MainActivity();
       //m1.setValues();
        //try {
            str = String.valueOf(m1.getPercent()) + "%";
            v1.setText(str);
        //}
    //catch (Exception e) {
      //  Log.e("app crash",e.getMessage());
    //}
}

}

【问题讨论】:

  • 也许你应该取消注释
  • 你不应该使用new来创建一个Activity类的实例

标签: java android android-developer-api


【解决方案1】:

它不能工作。如果您创建new MainActivity(),您的ttper 将是999

你应该这样pass data between Activities

  1. 将新计算的ttper放入Intent:intent.putExtra("ttper", ttper );

  2. 然后在MainActivity2 中使用getIntent().getFloatExtra("ttper", 999.0f);

【讨论】:

  • 请将问题标记为重复
【解决方案2】:

你有一个 MainActivity 实例,它有一个变量 ttper。您修改该值。 然后在另一个类 Main2Activity 中创建 MainActivity 的新实例并尝试获取该值,但 ttper 具有默认值,因为这是一个新实例并且尚未修改。

你可以做的就是将 ttper 定义为静态的:

static float ttper=999;

您甚至可以将函数 getPercent() 定义为静态的,这样您就不必创建此类的新实例来获取值。您只需调用 MainActivity.getPercent()。

如需更多信息,请阅读: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

无论如何,这不是将数据从一个活动传递到另一个活动的正确方法。您应该遵循以下准则:https://developer.android.com/training/basics/firstapp/starting-activity.html

【讨论】:

  • 从您那里学到了关于静态的新知识!我知道定义,但不知道我究竟做了什么。谢谢!
【解决方案3】:

您应该在意图上使用 extras 在活动之间传递数据。

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2021-12-19
    相关资源
    最近更新 更多