Как принять пользовательский ввод и сохранить как переменные? Я следовал учебному пособию шаг за шагом, но каждый раз, когда я пытаюсь запустить программу, она закрывает приложение в эмуляторе.
Я неоднократно просматривал учебник, и все, кажется, совпадает.
Logcat заявляет, что проблема заключается в том, что слушатель onClick возвращает нулевую ссылку на объект в android.app.ActivityThread.performLaunchActivity, однако мне кажется, что код выглядит нормально.
public class Macros extends AppCompatActivity {
private Integer kilojoules;
private Integer carbohydrates;
private Integer protein;
private Integer fat;
EditText kilojoulesInput;
EditText carbohydratesInput;
EditText proteinInput;
EditText fatInput;
Button saveButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_macros);
kilojoulesInput = (EditText) findViewById(R.id.kilojoulesInput);
carbohydratesInput = (EditText) findViewById(R.id.carbohydratesInput);
proteinInput = (EditText) findViewById(R.id.proteinInput);
fatInput = (EditText) findViewById(R.id.fatInput);
saveButton = (Button) findViewById(R.id.save_button);
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
kilojoules = Integer.valueOf(kilojoulesInput.getText().toString());
carbohydrates = Integer.valueOf(carbohydratesInput.getText().toString());
protein = Integer.valueOf(proteinInput.getText().toString());
fat = Integer.valueOf(fatInput.getText().toString());
}
});
}
private void showToast(String text){
Toast.makeText(Macros.this, text, Toast.LENGTH_SHORT).show();
}
public Macros(){
// No args constructor
}
public Macros(Integer kilojoules, Integer carbohydrates, Integer protein, Integer fat){
this.kilojoules = kilojoules;
this.carbohydrates = carbohydrates;
this.protein = protein;
this.fat = fat;
}
public Integer getKilojoules() {
return kilojoules;
}
public void setKilojoules(Integer kilojoules) {
this.kilojoules = kilojoules;
}
public Integer getCarbohydrates() {
return carbohydrates;
}
public void setCarbohydrates(Integer carbohydrates) {
this.carbohydrates = carbohydrates;
}
public Integer getProtein() {
return protein;
}
public void setProtein(Integer protein) {
this.protein = protein;
}
public Integer getFat() {
return fat;
}
public void setFat(Integer fat) {
this.fat = fat;
}
}
Logcat:
Процесс: com.example.myapplication, PID: 26980 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.example.myapplication / com.example.myapplication.Macros}: java.lang.NullPointerException:Попытайтесь вызвать виртуальный метод 'void android.widget.Button.setOnClickListener (android.view.View $ OnClickListener)' для ссылки на пустой объект в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2913) в android.app.ActivityThreadСвойствоTransactionExecutor.execute (TransactionExecutor.java:68) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1808) в android.os.Handler.dispatchMessage (Handler.java:106) в android.os.Looper.loop (Looper.java: 193) в android.app.ActivityThread.main (ActivityThread.java:6669) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java): 493) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) Причина: java.lang.NullPointerException: Попытка вызвать виртуальный метод void android.widget.Button.setOnClickListener (android.view. Просмотрите $ OnClickListener) 'для ссылки на пустой объект в com.example.myapplication.Macros.onCreate (Macros.java:37) в android.app.Activity.performCreate (Activity.java:7136) в android.app.Activity.performCreate. (Activity.java:7127) в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1271) в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2893) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3048) в android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) в android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108ser) в android. .TransactionExecutor.execute (TransactionExecutor.java:68) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1808) в android.os.Handler.dispatchMessage (Handler.java:106) в android.os.Looper. цикл (Looper.java:193) в android.app.ActivityThread.main (ActivityThread.java:6669) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller. выполнить (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)