将数据保存到TextView上的不同活动

时间:2016-02-26 15:23:07

标签: java android xml textview

在我的应用程序的主屏幕上,我希望各种TextViews最初仅保留“...”数据,直到用户输入他的数据。

用户输入在点击包含所有“...”值的CardView时打开的不同活动中的数据。

我经常得到NullPointerException

02-26 16:14:33.106 26275-26275/hr.app.liftme.liftmehr E/AndroidRuntime: FATAL EXCEPTION: main
    Process: hr.app.liftme.liftmehr, PID: 26275                                                               

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
    at hr.app.liftme.liftmehr.StatistikeInputMain$1.onClick(StatistikeInputMain.java:54)
    at android.view.View.performClick(View.java:4856)
    at android.view.View$PerformClick.run(View.java:19956)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:211)
    at android.app.ActivityThread.main(ActivityThread.java:5389)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

这是我的java文件

public class StatistikeInputMain extends AppCompatActivity {
    RadioGroup radioGrupa;
    RadioButton imperial, metric;
    EditText visinaCM, visinaFT, visinaINC, tezina, bodyfat, tdee;
    Spinner kolikoDugoTrenirate, cilj;
    TextView rezultatTDEE;
    Button spremiRezultat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_statistike_input_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        radioGrupa = (RadioGroup) findViewById(R.id.radioGrupaStatistike);
        imperial = (RadioButton) findViewById(R.id.radioStatistikeImperial);
        metric = (RadioButton) findViewById(R.id.radioStatistikeMetric);
        visinaCM = (EditText) findViewById(R.id.editTextStatistikeVisinaCM);
        visinaFT = (EditText) findViewById(R.id.editTextStatistikeVisinaFEET);
        visinaINC = (EditText) findViewById(R.id.editTextStatistikeVisinaINCH);
        tezina = (EditText) findViewById(R.id.editTextStatistikeTezina);
        bodyfat = (EditText) findViewById(R.id.editTextStatistikeBF);
        tdee = (EditText) findViewById(R.id.editTextStatistikeTDEE);
        kolikoDugoTrenirate = (Spinner) findViewById(R.id.spinnerStatistikeKolikoDugoTrenirate);
        cilj = (Spinner) findViewById(R.id.spinnerStatistikeCilj);
        spremiRezultat = (Button) findViewById(R.id.buttonStatistikeSpremi);
        rezultatTDEE = (TextView) findViewById(R.id.textViewStatistikeRezultatTDEE);

        spremiRezultat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                double unosTDEE = Double.parseDouble(tdee.getText().toString());

                double rezultatTDEEInput = 0;
                rezultatTDEE.setText(Double.toString(rezultatTDEEInput));
            }
        });
    }
}

请注意,此行发生错误

rezultatTDEE.setText(Double.toString(rezultatTDEEInput));

我希望数据保存在此文本视图

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="..."
    android:id="@+id/textViewStatistikeRezultatTDEE"
    android:textSize="14sp" />

初始化并在java文件中输入..

另一个注意事项 - 按下按钮时会保存数据!

我在这里缺少什么?

修改

  1. 活性

    spremiRezultat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), AppLayoutMain.class);
            intent.putExtra("tdeeInput", tdee.getText().toString());
            startActivity(intent);
    
  2. 活性

    Intent intent = getIntent();
    String tdee = intent.getStringExtra("tdeeInput");
    
  3. 我是这样做的,只是它没有给出错误,按钮工作正常,但它仍然不显示结果。

4 个答案:

答案 0 :(得分:0)

rezultatTDEE为null,这就是错误发生的原因。它是否存在于具有id R.id.textViewStatistikeRezultatTDEE的activity_statistike_input_main布局中?

答案 1 :(得分:0)

rezultatTDEE为空,因为R.id.textViewStatistikeRezultatTDEE

中没有R.layout.activity_statistike_input_main

您在评论中提到要在另一个Activity中设置文本。这意味着您需要使用Extra将String传递给新的Activity。例如:

Intent intent = new Intent(this, OtherActivity.class);
intent .putExtra("string", rezultatTDEEInput);
startActivity(intent); 

然后在OtherActivity中执行:

Intent intent = getIntent();
String string = intent.getExtras().getString("string");

然后你可以textView.setText(string)

答案 2 :(得分:0)

如果textViewStatistikeRezultatTDEE不在activity_statistike_input_main布局中,那么您获得NullPointerException是正常的。因为findViewById尝试在当前布局中查找视图。因此,如果您的TextView处于不同的活动中,则必须通过Intent

传递数据

怎么样?简单:Follow this

这是Android开发的基础。你真的必须知道这一点。这是关于Android编程的所有书籍/ tuto

答案 3 :(得分:0)

当您调用另一个活动,并且要将数据从被调用活动传输到调用者活动时,必须在调用者上实现onActivity Result()...并使用方法startActivityForResult()调用目标活动。然后在调用的活动setResult上将您的附加内容传递给Intent。

How to manage `startActivityForResult` on Android?

然后在主要活动中的onActivityResult上可以设置文本值。