在我的应用程序的主屏幕上,我希望各种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");
我是这样做的,只是它没有给出错误,按钮工作正常,但它仍然不显示结果。
答案 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上可以设置文本值。