Как получить пользовательский ввод в Android Studio - PullRequest
0 голосов
/ 13 октября 2019

Как принять пользовательский ввод и сохранить как переменные? Я следовал учебному пособию шаг за шагом, но каждый раз, когда я пытаюсь запустить программу, она закрывает приложение в эмуляторе.

Я неоднократно просматривал учебник, и все, кажется, совпадает.

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...