Список массивов создается только в том случае, если сначала выполняется одно действие, а не другое

#java #android #sqlite #arraylist

#java #Android #sqlite #arraylist

Вопрос:

У меня проблема с этим приложением, которое я пишу для класса в школе. Это базовое приложение для отслеживания тренировок.

У меня есть список массивов, но Cardio.java действие может сохраняться в ArrayList только в том случае, если Strength.java что-то уже сохранено первым. Не уверен, почему, поскольку код одинаков для обоих.

Я дважды проверил, что код одинаков для обоих действий, поэтому не уверен, почему кажется, что он сохраняется в ArrayList только в том случае, если strenght.java выполняется первым. Тогда это работает нормально.

Cardio.java

 public class Cardio extends AppCompatActivity {

    String cardio;
    String miles;
    String time;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cardio);

        Button saveButton = (Button) findViewById(R.id.btnSave);
        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatabaseHelper dbUtil = new DatabaseHelper();

                Spinner cardioSpinner = findViewById(R.id.listCardioType);
                cardio = cardioSpinner.getSelectedItem().toString();
                EditText milesText = findViewById(R.id.txtMileageInput);
                miles = milesText.getText().toString();
                EditText timeText = findViewById(R.id.txtTimeInput);
                time = timeText.getText().toString();

                String record = cardio   ": "   miles   " miles, "   time   " mins.";

                Log.d("test", record);

                ArrayList strengthWorkouts = dbUtil.getArrayList("strength_workouts");
                Log.d("test", strengthWorkouts.toString());
                strengthWorkouts.add(record);
                dbUtil.saveArrayList(strengthWorkouts, "strength_workouts");

                Toast toast = Toast.makeText(Cardio.this, "Workout Saved", Toast.LENGTH_LONG);
                toast.setGravity(0, 0, -200);
                toast.show();
            }


        });

        Button shareButton = (Button) findViewById(R.id.btnShare);
        shareButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(Intent.ACTION_SEND);
                myIntent.setType("text/plain");
                String shareBody = "I just completed a workout! "   cardio   ": "   miles   " miles, "   time   " mins.";
                myIntent.putExtra(Intent.EXTRA_SUBJECT, shareBody);
                myIntent.putExtra(Intent.EXTRA_TEXT, shareBody);
                startActivity(Intent.createChooser(myIntent, "Share Using:"));

            }
        });

    }
}
  

Strength.java

 public class Strength extends AppCompatActivity {

    String exercise;
    String repCount;
    String weight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_strength);

        Button saveButton = findViewById(R.id.btnSave);
        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatabaseHelper dbUtil = new DatabaseHelper();

                Spinner exerciseSpinner = findViewById(R.id.listWeightType);
                exercise = exerciseSpinner.getSelectedItem().toString();
                EditText repCountText = findViewById(R.id.txtRepInput);
                repCount = repCountText.getText().toString();
                EditText weightText = findViewById(R.id.txtWeightInput);
                weight = weightText.getText().toString();

                String record = exercise   ": "   repCount   " reps, "   weight   " lbs.";

                Log.d("test", record);

                ArrayList strengthWorkouts = dbUtil.getArrayList("strength_workouts");
                Log.d("test", strengthWorkouts.toString());
                strengthWorkouts.add(record);
                dbUtil.saveArrayList(strengthWorkouts, "strength_workouts");

                Toast toast = Toast.makeText(Strength.this, "Workout Saved", Toast.LENGTH_LONG);
                toast.setGravity(0, 0, -200);
                toast.show();

            }
        });

        Button shareButton = (Button) findViewById(R.id.btnShare);
        shareButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(Intent.ACTION_SEND);
                myIntent.setType("text/plain");
                String shareBody = "I just completed a workout! "   exercise   ": "   repCount   " reps, "   weight   " lbs.";
                myIntent.putExtra(Intent.EXTRA_SUBJECT, shareBody);
                myIntent.putExtra(Intent.EXTRA_TEXT, shareBody);
                startActivity(Intent.createChooser(myIntent, "Share Using:"));

            }
        });


    }
}
  

History.java

 public class History extends AppCompatActivity {

    private static final String TAG = "ListDataActivity";

    DatabaseHelper mDatabaseHelper;

    private ListView mListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_history);

        mListView = findViewById(R.id.listView);
        DatabaseHelper dbUtils = new DatabaseHelper();
        ArrayList<String> strengthHistory = dbUtils.getArrayList("strength_workouts");


        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_list_item_1,
                strengthHistory );

        mListView.setAdapter(arrayAdapter);
    }
}
  

Комментарии:

1. JavaScript и Java — это два совершенно разных языка.

Ответ №1:

Я думаю, что ваш dbUtils.getArrayList("strength_workouts") возвращает нулевой список массивов, если у вас нет данных в вашей базе данных для «strength_workouts».

Попробуйте создать список, если в вашем действии он равен null:

 ArrayList strengthWorkouts = dbUtil.getArrayList("strength_workouts");

if(strengthHistory == null) {
   strengthHistory = new ArrayList<String>();
}

strengthWorkouts.add(record);
dbUtil.saveArrayList(strengthWorkouts, "strength_workouts");