单击按钮,Android Studio(Java)

时间:2016-06-13 19:36:25

标签: java android

Hello fellow programmers!
I have a very disturbing situation here...I'm developing an Android App with several activities.In them I have buttons.The app itself is for measuring calories and other sports releated stuff.
I have a calorie calculator which I have built in the app,spread across 2 activities.In activity 1,the calculator measures the Basal Metabolic Rate and In the second activity,the app calculates the calories needed,when clicking a button for the desired activity level.My app crashes in the second activity,when clicking "Sedentary" button and I have no clue why,because these buttons are built just like the buttons in my first activity.I'll post photos and my code so you can get orientation.
Btw,the app crashes also when clicking "Null Data" in the first activity with the BMR...The button doesn't have any coding on it and does nothing.I'm not calling calculate() method in the second activity,instead I tried doing the button click in the main method,but it still didn't work.

Hello其他程序员!     我在这里有一个非常令人不安的情况......我正在开发一个带有几个活动的Android应用程序。其中我有按钮。应用程序本身用于测量卡路里和其他体育相关的东西。     我有一个我在应用程序中构建的卡路里计算器,分布在2个活动中。在活动1中,计算器测量基础代谢率。在第二个活动中,应用程序计算所需的卡路里,当单击所需活动的按钮时当我点击" Sedentary"按钮,我不知道为什么,因为这些按钮的构建就像我第一次活动中的按钮一样。我会发布照片和我的代码,这样你就可以获得方向。     顺便说一下,当点击" Null Data"时,应用程序也会崩溃。在BMR的第一个活动中...按钮上没有任何编码,什么也没做。我没有在第二个活动中调用calculate()方法,而是尝试按下按钮主要方法,但它仍然没有用。First Activity Second Activity

`package com.petartonkov.foodandsportsinfo;

import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;

public class CalorieCalculator extends AppCompatActivity {

    public Button nextstepbtn;
    public TextView BMR;
    public EditText height;
    public EditText weight;
    public EditText age;

    public void calculate() {
       final Button calculateBMR = (Button) findViewById(R.id.CalcBtn);
       final TextView BMR = (TextView) findViewById(R.id.textView_BMR);
       final EditText weight = (EditText) findViewById(R.id.editText_weight);
       final EditText height = (EditText) findViewById(R.id.editText_height);
       final EditText age = (EditText) findViewById(R.id.editText_age);
        assert calculateBMR != null;
        calculateBMR.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                assert weight != null;
                float weight1 = Float.parseFloat(weight.getText().toString());
                assert height != null;
                float height1 = Float.parseFloat(height.getText().toString());
                assert age != null;
                float age1 = Float.parseFloat(age.getText().toString());
                float BMR1 = (13.75f * weight1 + 5.003f * height1 - 6.755f * age1) + 66.75f;
                assert BMR != null;
                BMR.setText(Float.toString(BMR1));
            }
        });
    }
    public void calculate1() {
        final Button calculateBMR = (Button) findViewById(R.id.CalcBtnFemale);
        final TextView BMR = (TextView) findViewById(R.id.textView_BMR);
        final EditText weight = (EditText) findViewById(R.id.editText_weight);
        final EditText height = (EditText) findViewById(R.id.editText_height);
        final EditText age = (EditText) findViewById(R.id.editText_age);
        assert calculateBMR != null;
        calculateBMR.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                assert weight != null;
                float weight1 = Float.parseFloat(weight.getText().toString());
                assert height != null;
                float height1 = Float.parseFloat(height.getText().toString());
                assert age != null;
                float age1 = Float.parseFloat(age.getText().toString());
                float BMR1 = (9.563f * weight1 + 1.85f * height1 - 4.676f * age1) + 655.1f;
                assert BMR != null;
                BMR.setText(Float.toString(BMR1));
            }
        });
    }
    public void init4(){
        nextstepbtn = (Button)findViewById(R.id.NextStepBtn);
        nextstepbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent1 = new Intent(getBaseContext(), CalorieCalculatorSecondActivity.class);
                intent1.putExtra("BMR", (Parcelable) BMR);
                startActivity(intent1);
            }
        });


    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calorie_calculator);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
            init4();
calculate();
        calculate1();
    }

}
`

      `  package com.petartonkov.foodandsportsinfo;

    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    public class CalorieCalculatorSecondActivity extends CalorieCalculator {

    public void totalcalories() {
        final Button calculateBtn = (Button) findViewById(R.id.button_sedentary);
        final TextView totalcalories = (TextView) findViewById(R.id.textView_totalcalories);
        final TextView BMR = (TextView) findViewById(R.id.textView_BMR);
        assert calculateBtn != null;
        calculateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                assert BMR != null;
                float BMR2 = Float.parseFloat(BMR.getText().toString());
                float totalcalories1 = BMR2 * 1.2f;
                assert totalcalories != null;
                totalcalories.setText(Float.toString(totalcalories1));
            }
        });
    }
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_calorie_calculator_second);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            Bundle extras = getIntent().getExtras();
    final Button calcBtn = (Button)findViewById(R.id.button_sedentary);
            final TextView totalcalories2 = (TextView)findViewById(R.id.textView_totalcalories);
            final TextView BMR1 = (TextView) findViewById(R.id.textView_BMR);
            assert calcBtn != null;
            calcBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    assert BMR1 != null;
                    float BMR3 = Float.parseFloat(BMR1.getText().toString());
                    float totalcalories4 = BMR3 * 1.2f;
                    assert totalcalories2 != null;
                    totalcalories2.setText(Float.toString(totalcalories4));
                }
            });
        }
    }
`

`              

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Enter your data below to calculate your BMR(Basal Metabolic Rate) and then enter your level of physical activity to determine your daily calorie needs.BMR-this number is the calories needed from the body to maintain basic living functions."
        android:id="@+id/textView2"
        android:textColor="#040404"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="30dp" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="go to next step"
        android:id="@+id/NextStepBtn"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="BMR:"
        android:id="@+id/textView11"
        android:textColor="#070707"
        android:layout_below="@+id/CalcBtn"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="26dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="CAL"
        android:id="@+id/textView13"
        android:layout_alignTop="@+id/textView_BMR"
        android:layout_centerHorizontal="true"
        android:textColor="#980606" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NULL DATA"
        android:id="@+id/btn_nulldata"
        android:layout_alignBaseline="@+id/NextStepBtn"
        android:layout_alignBottom="@+id/NextStepBtn"
        android:layout_alignRight="@+id/textView2"
        android:layout_alignEnd="@+id/textView2"
        android:onClick="onCheckboxClicked"/>


    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/editText_age"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="27dp"
        android:hint="Enter age"
        android:layout_below="@+id/textView2" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/editText_weight"
        android:layout_below="@+id/editText_age"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:hint="Enter weight(In KG)"
        android:layout_alignRight="@+id/NextStepBtn"
        android:layout_alignEnd="@+id/NextStepBtn" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/editText_height"
        android:layout_below="@+id/editText_weight"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:hint="Enter height(In CM)" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/textView_BMR"
        android:layout_alignTop="@+id/textView11"
        android:layout_toLeftOf="@+id/NextStepBtn"
        android:layout_toStartOf="@+id/NextStepBtn"
        android:textColor="#980606" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CALCULATE BMR-MALE"
        android:id="@+id/CalcBtn"
        android:background="?attr/colorPrimary"
        android:textColor="#ffffff"
        android:layout_marginTop="31dp"
        android:layout_below="@+id/editText_height"
        android:layout_toLeftOf="@+id/textView13"
        android:layout_toStartOf="@+id/textView13" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CALCULATE BMR-FEMALE"
        android:id="@+id/CalcBtnFemale"
        android:background="?attr/colorPrimary"
        android:textColor="#ffffff"
        android:layout_alignBottom="@+id/CalcBtn"
        android:layout_toRightOf="@+id/textView13"
        android:layout_toEndOf="@+id/textView13" />


</RelativeLayout>`

`     

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="SELECT YOUR LEVEL OF PHYSICAL ACTIVITY:"
        android:id="@+id/textView10"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="sedentary"
        android:id="@+id/button_sedentary"
        android:layout_below="@+id/textView10"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:clickable="true"
        android:enabled="true"
        android:onClick="setContentView" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="moderately active"
        android:id="@+id/button_moderatelyactive"
        android:layout_alignTop="@+id/button_sedentary"
        android:layout_alignRight="@+id/textView14"
        android:layout_alignEnd="@+id/textView14" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Very active"
        android:id="@+id/button_veryactive"
        android:layout_below="@+id/button_sedentary"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Extremely active"
        android:id="@+id/button_extremelyactive"
        android:layout_alignBottom="@+id/button_veryactive"
        android:layout_alignLeft="@+id/button_moderatelyactive"
        android:layout_alignStart="@+id/button_moderatelyactive" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Sedentary - Little or no exercise,little walking"
        android:id="@+id/textView14"
        android:layout_below="@+id/button_veryactive"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textColor="#e10e0e" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Lighty active - light exercise 1-3 times/week + walking"
        android:id="@+id/textView15"
        android:layout_below="@+id/textView14"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textColor="#e10e0e" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Moderately active - exercise 3-5 times/week + walking"
        android:id="@+id/textView16"
        android:layout_below="@+id/textView15"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textColor="#e10e0e" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Very active - hard exercise 5-7 times/week + walking"
        android:id="@+id/textView17"
        android:textColor="#e10e0e"
        android:layout_below="@+id/textView16"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="TOTAL CALORIES NEEDED:"
        android:id="@+id/textView18"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textColor="#080808" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/textView_totalcalories"
        android:layout_alignTop="@+id/textView18"
        android:layout_toRightOf="@+id/textView18"
        android:layout_toEndOf="@+id/textView18"
        android:editable="false"
        android:enabled="false"
        android:text="0" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="CAL"
        android:id="@+id/textView20"
        android:layout_alignBottom="@+id/textView_totalcalories"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:textColor="#090909" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NULL DATA"
        android:id="@+id/btn_nulldata2"
        android:layout_marginBottom="48dp"
        android:layout_alignParentBottom="true"
        android:layout_alignRight="@+id/button_sedentary"
        android:layout_alignEnd="@+id/button_sedentary" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Extra active - hard exercise 5-7 times/week + physical job + walking"
        android:id="@+id/textView3"
        android:textColor="#e10e0e"
        android:layout_below="@+id/textView17"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Lightly active"
        android:id="@+id/button"
        android:layout_alignBottom="@+id/button_extremelyactive"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_toRightOf="@+id/button_extremelyactive"
        android:layout_toEndOf="@+id/button_extremelyactive" />

</RelativeLayout>`

`

                                                                                 --------- beginning of crash
06-14 06:10:35.167 2481-2481/com.petartonkov.foodandsportsinfo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                 Process: com.petartonkov.foodandsportsinfo, PID: 2481
                                                                                 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
                                                                                     at com.petartonkov.foodandsportsinfo.CalorieCalculatorSecondActivity$2.onClick(CalorieCalculatorSecondActivity.java:44)
                                                                                     at android.view.View.performClick(View.java:5198)
                                                                                     at android.view.View$PerformClick.run(View.java:21147)
                                                                                     at android.os.Handler.handleCallback(Handler.java:739)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                     at android.os.Looper.loop(Looper.java:148)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

`

4 个答案:

答案 0 :(得分:0)

这个方法正在抛出

     calcBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                assert BMR1 != null;
                float BMR3 = Float.parseFloat(BMR1.getText().toString());
                float totalcalories4 = BMR3 * 1.2f;
                assert totalcalories2 != null;
                totalcalories2.setText(Float.toString(totalcalories4));
            }
        });

你的secondActivity布局中没有textView_BMR的TextView(BMR1)

答案 1 :(得分:0)

要将值从一个活动传递到另一个活动,您可以使用Intent extra

Intent extra是您希望从一个活动传递到另一个活动的一组附加信息。您可以创建这样的额外内容

//First Activity
Intent i = new Intent(FirstActiviy.this, SecondActivity.class);   
String value = "some string you want to put in the extra";
int value2 = 14

//put extra as key-value pairs
i.putExtra("KEY", value);
i.putExtra("KEY2", value2);

startActivity(i);


//Second activity 

//Get the values from previous Activity by keys you set 
String stringValueFromPreviousActivity = getIntent().getStringExtra("key");

//Note: when you getting integer as the second parameter pass the default value if there is no passed integer
int intValueFromPreviousActiviy = getIntent().getIntExtra("key",4);

答案 2 :(得分:0)

我尝试在一个活动中设置计算器...我重新安排了按钮并猜测是什么..?我从BMR TextView的浮动是NULL,通过我在BMR TextView中有一个字符串。为什么会发生这种情况?我写了第一项活动中另一种方法的总卡路里代码。

public void calculatetotalcalories()
    {
        final Button calcbtn_sedentary = (Button)findViewById(R.id.button_sedentary);
        final TextView totalcalories = (TextView)findViewById(R.id.textView_totalcalories);
        calcbtn_sedentary.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                float BMRconverted= Float.parseFloat(String.valueOf(BMR));
                float totalcalories1 =BMRconverted*1.2f;
                totalcalories.setText(Float.toString(totalcalories1));
            }
        });

答案 3 :(得分:0)

我解决了问题。在活动开始时它是一个空对象引用。现在一切正常!