将数据保存到不同的活动上
在我的应用程序的主屏幕上,我希望有各种各样的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文件..
另一个注意事项 - 按下按钮时会保存数据!
我在这里错过了什么?
编辑
活动
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);
活动
Intent intent = getIntent(); String tdee = intent.getStringExtra(“tdeeInput”);
我这样做,只是它不会给出错误,按钮工作正常,但它仍然不显示结果
rezultatTDEE为空,这就是错误发生的原因。 它是否存在于id为R.id.textViewStatistikeRezultatTDEE的activity_statistike_input_main布局中?
如果textViewStatistikeRezultatTDEE
不在activity_statistike_input_main
布局中,那么正常情况下会出现NullPointerException。 因为findViewById试图在当前布局中查找视图。 因此,如果您的TextView处于不同的活动中,则必须通过Intent传递数据
怎么样 ? 简单:按照这个
这是Android开发的基础。 你真的必须知道这一点。 这是关于Android编程的所有书/ tuto
rezultatTDEE为空,因为您在R.layout.activity_statistike_input_main
没有R.id.textViewStatistikeRezultatTDEE
您在评论中提到您要在其他活动中设置文字。 这意味着您需要使用Extra来将字符串传递给新的活动。 例如:
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)